Echo newline в Bash печатает литерал n
в Баш, попробовал это:
echo -e "hellonworld"
но он не печатает новую строку, только n
. Как я могу заставить его напечатать новую строку?
Я использую Ubuntu 11.04.
17 ответов:
вы могли бы использовать
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'
рассматриваются специально. Слово расширяется до строка, С обратной косой чертой-экранированные символы заменены, как указано в стандарте ANSI C.
в случае, если кто-то обнаруживает, что бьется головой о стену, пытаясь понять, почему сценарий коллеги не будет печатать новые строки, обратите внимание на это ->
#!/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;
POSIX 7 на echo
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
Не определен, а обратные косые черты определены реализацией:если первый операнд равен-n, или если любой из операндов содержит символ , результаты определяются реализацией.
если у вас нет дополнительного расширения XSI.
так что используйте
printf
вместо:операнд формата должен использоваться в качестве строки формата, описанной в нотации формата файла XBD [...]
the Файл Формате:
\n переместите положение печати в начало следующей строки.
также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализовать
echo
как:
- встроенный Баш:
help echo
- автономный исполняемый файл:
which echo
что может привести к некоторой путанице.
еще одна запись здесь для тех, кто не смог работать с любым из этих решений, и нужно получить возвращаемое значение из функции:
function foo() { local v="Dimi"; local s=""; ..... s+="Some message here $v \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)
надеюсь, что это поможет кому-то с подобной проблемой.
мой скрипт:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
выход:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
на моем сценарии bash я злился, как вы, пока я просто не попробовал:
echo "WARNING : $warningsFound WARNINGS FOUND: $warningStrings"
просто нажмите enter, где вы хотите вставить этот прыжок. Выход теперь:
WARNING : 2 WARNINGS FOUND: Warning, found the following local orphaned signature file:
Это лучше сделать как
x="\n" echo -ne $x
-e опция будет интерпретировать обратные слэхи для escape-последовательности
- опция n удалит конечную новую строку в выводеPS: команда echo всегда включает в себя конечную новую строку в выводе, поэтому-n требуется, чтобы отключить эту вещь (и сделать ее менее запутанной)
иногда вы можете передать несколько строк, разделенных пробелом, и это будет интерпретироваться как
\n
.например, при использовании сценария оболочки для многострочных уведомлений:
#!/bin/bash notify-send 'notification success' 'another line' 'time now '`date +"%s"`
есть новаярасширения параметр добавил
bash 4.4
что интерпретирует escape-последовательности:
${parameter@operator} - E operator
расширение представляет собой строку, которая является значением параметра с escape-последовательности обратной косой черты расширены как с
$'…'
цитировать механизм.$ foo='hello\nworld' $ echo "${foo@E}" hello world