В Bash, попробовал следующее:
echo -e "hello\nworld"
Но он не печатает новую строку, только \n
. Как я могу сделать печать новой строки?
Я использую Ubuntu 11.04.
В Bash, попробовал следующее:
echo -e "hello\nworld"
Но он не печатает новую строку, только \n
. Как я могу сделать печать новой строки?
Я использую Ubuntu 11.04.
Вместо printf
можно использовать
printf "hello\nworld\n"
printf
имеет более последовательное поведение, чем echo
. Поведение echo
сильно варьируется между разными версиями.
Вы уверены, что находитесь в bash? Работает для меня всеми тремя способами:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo $'hello\nworld'
печатает
hello
world
$''
строки используют ANSI C Quoting:
Слова вида
$'string'
рассматриваются специально. Слово расширяется до string, при этом символы с обратным слэшем-экранированием заменяются в соответствии со стандартом ANSI C.
Вы всегда можете сделать echo ""
.
например.
echo "Hello"
echo ""
echo "World"
В случайном случае, когда кто-то обнаруживает, что они бьют головой о стену, пытаясь понять, почему сотрудник script не будет печатать новые строки, обратите внимание на это →
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
echo $(GET_RECORDS);
Как и в приведенном выше примере, фактический запуск метода сам может быть обернут в эхо, которое заменяет любые эхо-сигналы, которые могут быть в самом методе. Очевидно, я окунал это для краткости, это было не так просто заметить!
Затем вы можете сообщить своим товарищам, что лучший способ выполнения функций будет таким:
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
GET_RECORDS;
Попробуйте
echo -e "hello\nworld"
hello
world
работал для меня в нано-редакторе.
Со страницы руководства:
-e
включить интерпретацию обратной косой черты
Это работает для меня в Raspbian,
echo -e "hello\\nworld"
POSIX 7 на эхо
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
не определен, а обратные -e
определены реализацией:
Если первый операнд - -n, или если любой из операндов содержит символ <backslash>, результаты определяются реализацией.
если у вас нет дополнительного расширения XSI.
Поэтому я рекомендую вместо этого использовать printf
, что хорошо указано:
операнд формата должен использоваться в качестве строки формата, описанной в нотации формата файла XBD [...]
обозначение формата файла:
\n <newline> Переместите позицию печати в начало следующей строки.
Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют echo
как:
help echo
which echo
что может привести к некоторой путанице.
str='hello\nworld'
$ echo | sed "i$str"
hello
world
Это работает для меня в CentOS:
echo -e ""hello\nworld""
Вы также можете сделать:
echo "hello
world"
Это работает как внутри скрипта, так и из командной строки.
В командной строке нажмите Shift + Enter, чтобы сделать разрывы строк внутри строки.
Это работает для меня на моем MacOS и Ubuntu 18.04
Еще одна запись здесь для тех, кто не помог ни с одним из этих решений, и должен получить возвращаемое значение из своей функции:
function foo()
{
local v="Dimi";
local s="";
.....
s+="Some message here $v $1\n"
.....
echo $s
}
r=$(foo "my message");
echo -e $r;
Только этот трюк работал в Linux, с которым я работал с этим bash:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
Надеюсь, что это поможет кому-то с подобной проблемой.
Мой script:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
Вывод:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
На моем bash script я злился, пока я только что пробовал:
echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"
Просто нажмите Enter, где вы хотите вставить этот прыжок. Вывод:
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
Просто наберите
echo
чтобы получить новую линию
Это лучше сделать как
x="\n"
echo -ne $x
Опция -e будет интерпретировать backslahes для escape-последовательности
-n удаляет конечную новую строку в выходном файле
PS: команда echo имеет эффект, всегда включающий конечную новую строку в выходном файле, поэтому -n требуется отключить эту вещь (и сделать ее менее запутанной)
Вы также можете использовать эхо с фигурными скобками,
$ (echo hello; echo world)
hello
world
В bash 4.4
добавлено новое расширение параметров, которое интерпретирует escape-последовательности:
${[email protected]} - E operator
Расширение - это строка, которая представляет собой значение параметра с последовательностями escape-лака с обратной косой чертой, как и механизм
$'…'
цитирования.
$ foo='hello\nworld'
$ echo "${[email protected]}"
hello
world
Я не мог получить какие-либо предложения в этом ответе, потому что, как оказалось, я пытался использовать его в функции, которая возвращает значение, и все сообщения echo (и printf) в этой функции были добавляется к возвращаемому значению после индивидуального удаления строк новой строки.
Вот вопрос относительно этого, с очень тщательным ответом:
Это было похоже на трехчасовой тайный тур.
Иногда вы можете передать несколько строк, разделенных пробелом, и будет интерпретироваться как \n
.
Например, при использовании сценария оболочки для многострочных уведомлений:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now ''date +"%s"'
Если вы пишете сценарии и несколько раз будете повторять строки как часть других сообщений, хорошим кроссплатформенным решением будет поместить буквенную строку в переменную следующим образом:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
Мне пришлось заключить текст в двойные кавычки при использовании в качестве псевдонима в профиле bash (MacOx, iTerm).
alias helloworld="echo -e \"hello \n world\""
В некоторых случаях вы должны отобразить длинный контент (например, код) с некоторой конкатенацией env var и хотите упростить его.
echo -e
, printf
может иметь некоторые ограничения
Вы можете использовать специальный символ в качестве заполнителя для переноса строки (например, ~
)
и попробуйте это:
echo ${content} | tr '~' '\n' > $targetFile
это должно вызвать другую программу (tr
), которая должна быть хорошей IMO.