Echo newline в Bash печатает литерал n
в Bash, попробовал это:
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
вместо:
format operand используется в качестве строки формата, описанной в нотации формата файла XBD [...]
на Файл Формате:
\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 растолкует backslahes для 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