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

В 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 ' обрабатываются специально. Слово расширяется до строки с заменой символов с обратным слэшем, как указано в стандарте ANSI C.

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

например

 echo "Hello" echo "" echo "World" 

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

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

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

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

echo -e "hello\\nworld"

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

POSIX 7 на эхо

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

-e не определяется, а обратные слэши определяются реализацией:

Если первым операндом является -n, или если какой-либо из операндов содержит символ <обратная косая черта>, результаты определяются по реализации.

если у вас нет дополнительного расширения XSI.

Поэтому используйте printf вместо:

format используется как строка формата, описанная в XBD Format Format Notation […]

Обозначение формата файла :

\ n <новая строка> Переместите положение печати в начало следующей строки.

Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют echo как:

  • встроенный Bash: help echo
  • автономный исполняемый файл: which echo

что может привести к некоторой путанице.

Еще одна запись здесь для тех, кто не помог ни с одним из этих решений, и должен получить возвращаемое значение из своей функции:

 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) 

Надеюсь, это поможет кому-то с подобной проблемой.

Мой скрипт:

 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: 

Вы также можете использовать эхо с фигурными скобками,

 $ (echo hello; echo world) hello world 

Это можно сделать лучше

 x="\n" echo -ne $x 

-e будет интерпретировать backslahes для escape-последовательности
-n будет удалять завершающую новую строку на выходе

PS: команда echo имеет эффект, всегда включающий конечную новую строку в выходном файле, поэтому -n требуется отключить эту вещь (и сделать ее менее запутанной)

Вы также можете сделать:

 echo "hello world" 

Это работает для меня на моем macOS.

Иногда вы можете передать несколько строк, разделенных пробелом, и будет интерпретироваться как \n .

Например, при использовании сценария оболочки для многострочных уведомлений:

 #!/bin/bash notify-send 'notification success' 'another line' 'time now '`date +"%s"` 

В bash 4.4 добавлено новое расширение параметров, которое интерпретирует escape-последовательности:

${[email protected]} - E operator

Расширение – это строка, которая представляет собой значение параметра с последовательностями escape-лака с обратной косой чертой, как и механизм $'…' цитирования.

 $ foo='hello\nworld' $ echo "${[email protected]}" hello world 

Эта команда работает для меня в CentOS:

 echo -e ""hello\nworld"" 
  • Что происходит с «% n» Java в printf?
  • Как избежать замены команды bash для удаления символа новой строки?
  • Как добавить текст в QPlainTextEdit без добавления новой строки и сохранить прокрутку внизу?
  • Как написать новый символ строки в файл в Java
  • Почему этот код печатает два раза?
  • '\ r': команда не найдена - .bashrc / .bash_profile
  • Как заменить символы новой строки с помощью JSP и JSTL?
  • Заменить новую строку в TSQL
  • Как получить зависимый от платформы новый символ линии?
  • Разделить строку Java на новую строку
  • Текстовый редактор, который показывает \ r \ n?
  • Давайте будем гением компьютера.