Вопрос: Echo newline в Bash печатает буквально \ n


В Bash попытался:

echo -e "hello\nworld"

Но он не печатает новую строку, только \n, Как я могу сделать печать новой строки?

Я использую Ubuntu 11.04.


1524


источник


Ответы:


Вы можете использовать printfвместо:

printf "hello\nworld\n"

printfимеет более последовательное поведение, чем echo, Поведение echoсильно варьируется между различными версиями.


1863



Вы уверены, что находитесь в bash? Работает для меня, все три способа:

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world

1265



echo $'hello\nworld'

печать

hello
world

$''использование строк ANSI C Цитата :

Слова формы $'строка 'обрабатываются специально. Слово расширяется до строка , с замененными обратными слэшами символами, указанными в стандарте ANSI C.


408



Вы всегда можете сделать echo "",

например

echo "Hello"
echo ""
echo "World"

84



В случае, если кто-то обнаруживает, что они бьют головой к стене, пытаясь понять, почему сценарий коллеги не будет печатать новые строки, обратите внимание на это ->

#!/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;

31



Это работает для меня в распб,

echo -e "hello\\nworld"


17



Пытаться

echo -e "hello\nworld"
hello
world

работал для меня в редакторе nano.


17



str='hello\nworld'
$ echo | sed "i$str"
hello
world

14



POSIX 7 on echo

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e is not defined and backslashes are implementation defined:

If the first operand is -n, or if any of the operands contain a <backslash> character, the results are implementation-defined.

unless you have an optional XSI extension.

So use printf instead:

format operand shall be used as the format string described in XBD File Format Notation [...]

the File Format Notation:

\n <newline> Move the printing position to the start of the next line.

Also keep in mind that Ubuntu 15.10 and most distros implement echo both as:

  • a Bash built-in: help echo
  • a standalone executable: which echo

which can lead to some confusion.


13



One more entry here for those that didn't make it work with any of these solutions, and need to get a return value from their function:

function foo()
{
    local v="Dimi";
    local s="";
    .....
    s+="Some message here $v $1\n"
    .....
    echo $s
}

r=$(foo "my message");
echo -e $r;

Only this trick worked in a linux I was working on with this bash:

GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)

Hope it helps someone with similar problem.


4



My script:

echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings

Output:

WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:

On my bash script I was getting mad as you until I've just tried:

echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"

Just hit enter where you want to insert that jump. Output now is:

WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:

3



You could also use echo with braces,

$ (echo hello; echo world)
hello
world

1