Для тех, кто говорит «это работает для меня», поведение эха довольно сильно отличается в разных версиях. Некоторые даже напечатают «-e» как часть своего вывода. Если вам нужно предсказуемое поведение для чего-то нетривиального, используйте вместо этого printf (как в ответе @ sth).
Гордон Дэвиссон
6
Я не смог заставить работать ни одно из предложений в этом ответе, потому что, как оказалось, я пытался использовать его в функции, которая возвращает значение , и все сообщения echo (и printf) в функции добавлялись к возвращаемое значение после индивидуального удаления новых строк . Вот вопрос, касающийся этого, с очень тщательным ответом: stackoverflow.com/questions/27872069/… Это было похоже на трехчасовой загадочный тур.
aliteralmind
8
Также примечательно: в Unix & Linux Stack Exchange принятый ответ на Как добавлять новые строки при использовании echo
Грэм Перрин
@GrahamPerrin, спасибо за ссылку на очень хороший и подробный ответ! Я думаю, что это лучше, чем ответы ниже.
Константин
2
echo -ne "hello \ nworld" (вам нужен флаг n для интерпретации выходов), но, как говорят другие, разные команды echo могут иметь разные результаты!
Кончог,
Ответы:
2882
Вы можете использовать printfвместо:
printf "hello\nworld\n"
printfимеет более последовательное поведение, чем echo. Поведение echoсильно различается в разных версиях.
или даже printf %"s\n" hello world- printf будет повторно использовать формат, если задано слишком много аргументов
glenn jackman 12.12.11
28
ОП спрашивал о echo, а не printf; и ответ @ choroba ниже, который использует опцию -e, отлично дополняет счет.
JESii
57
@JESii: Это подходит, если вы echoподдерживаете -eопцию.
STH
11
В некоторых версиях echo, -eпросто печатается в самом выводе, поэтому я думаю, что этот ответ совершенно верный, поскольку echoздесь не согласуется (если мы не говорим о конкретной версии).
Теджас Манохар
14
Это хорошо, если printf доступен, но в отличие от echo иногда printf отсутствует в дистрибутиве.
bigtunacan
1714
Вы уверены, что находитесь в Bash? У меня работает все четыре способа:
-e флаг сделал это для меня, что «позволяет интерпретировать обратные
слэши
21
Я думаю, что -eparam не существует на всех * nix OS
kenorb
12
@kenorb: существует в bash. Это встроенный.
Чороба
Почему третий работает? Без $ возвращается «Hello n world»
Эван Донован,
21
Как уже упоминалось, другие -e НЕ работают для всех дистрибутивов и версий. В некоторых случаях он игнорируется, а в других он будет фактически распечатан. Я не верю, что это исправило это для ОП, поэтому не следует принимать ответ
Слова формы обрабатываются специально. Слово расширяется до строки , символы с обратной косой чертой заменяются в соответствии со стандартом ANSI C.$'string'
@EvgeniSergeev Не знаю, что ты имеешь в виду, но у меня это тоже не сработало. И это потому, что я использовал двойные кавычки и оказалось, что это работает только с одинарными кавычками! Пробовал в Терминале на Mac.
августа
11
Проблемы с переменными в строке не раскрываются.
Виллемд
Вы все еще можете объединять строки в двойных кавычках. `foo =" bar "; echo $ '' $ foo'efoot'`
В случае, если кто-то окажется, что бьет себя головой о стену, пытаясь понять, почему сценарий коллеги не будет печатать переводы строк, следите за этим ->
#!/bin/bashfunction GET_RECORDS(){
echo -e "starting\n the process";}
echo $(GET_RECORDS);
Как и в приведенном выше примере, фактическое выполнение метода само может быть заключено в эхо-сигнал, который заменяет любые эхо-сигналы, которые могут присутствовать в самом методе. Очевидно, я поливал это для краткости, это было не так легко обнаружить!
Затем вы можете сообщить своим товарищам, что лучший способ выполнения функций будет выглядеть так:
#!/bin/bashfunction GET_RECORDS(){
echo -e "starting\n the process";}
GET_RECORDS;
Значительно недооцененный ответ, не могу поверить, что этот вопрос набрал более 20 ответов с 2011 года, и что ни один из них не содержит этого простого решения.
Как вы печатаете разрыв строки без использования оболочки для запуска команды при нажатии Ènter`?
Ксенос
@ Xenos Это хорошо работает в сценарии. А в консоли просто нажмите Shift + Enter, чтобы добавить новую строку, чтобы избежать запуска оболочки незавершенной команды.
Винзее
5
Еще одна запись для тех, кто не работал с любым из этих решений и которым необходимо получить возвращаемое значение из их функции:
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)
Надеюсь, это поможет кому-то с подобной проблемой.
Просто заметьте, что вы, вероятно, захотите использовать $ {} вокруг имен переменных, так как это не может привести к очень странному поведению, когда оболочка находит переменную с именем $ warningsFound и печатает ее, а не два отдельных вывода.
dragon788
@ dragon788 может я что-то упускаю, но переменная IS на самом деле называется $ warningsFound?
psynnott
2
Я пропустил слово об этом. Если у вас есть переменная с именем $ warnings, в некоторых случаях без использования $ {warningsFound}, вы можете получить содержимое переменной $ warnings + «Found» вместо переменной, которую вы намеревались.
dragon788
3
Вы также можете использовать эхо с фигурными скобками,
синтаксическая ошибка рядом с неожиданным токеном `('при вызове в файле .sh
cosbor11
1
попробуйтеecho hello; echo world
Avinash Raj
1
Или "echo hello && echo world" или просто: "echo hello echo world
csga5000
3
Это может быть лучше сделано как
x="\n"
echo -ne $x
Опция -e интерпретирует обратную косую черту для escape-последовательности.
Опция -n удаляет завершающий символ новой строки в выходных данных.
PS: команда echo всегда включает заключительный символ новой строки в выводе, поэтому -n требуется, чтобы отключить эту вещь (и сделать ее менее запутанной)
echo -ne "hello \ nworld" для точного ответа на вопрос :)
Dhwanit
3
Существует новое расширение параметр добавлен в bash 4.4который интерпретирует управляющие последовательности:
${parameter@operator} - E operator
Раскрытие - это строка, представляющая собой значение параметра с escape-последовательностями с обратной косой чертой, развернутыми, как в $'…'механизме цитирования.
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
Если вы пишете сценарии и несколько раз будете повторять строки как часть других сообщений, хорошим кроссплатформенным решением будет поместить буквенную строку в переменную следующим образом:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}">&2#requires usage to be defined
Это неверно Это никогда не интерпретируется как \n. Он интерпретируется как отдельный аргумент для программы, и сама программа может отображать этот аргумент в новой строке, но это не означает, что он был преобразован \nв любой момент и полностью зависит от программы.
Score_Under
0
Мне пришлось заключить текст в двойные кавычки при использовании в качестве псевдонима в профиле bash (MacOx, iTerm).
В случаях, вы должны повторить многострочное из длинного содержимого (например, код / конфигурации)
Например :
Скрипт Bash для генерации кодов / конфигураций
echo -e,
printfМожет иметь некоторые ограничения
Вы можете использовать специальный символ в качестве заполнителя в качестве разрыва строки (например, ~ ) и заменить его после того, как файл был создан с помощьюtr
echo ${content}| tr '~''\n'> $targetFile
это должно вызвать другую программу ( tr), которая должна быть хорошей IMO.
Ответы:
Вы можете использовать
printf
вместо:printf
имеет более последовательное поведение, чемecho
. Поведениеecho
сильно различается в разных версиях.источник
printf %"s\n" hello world
- printf будет повторно использовать формат, если задано слишком много аргументовecho
поддерживаете-e
опцию.echo
,-e
просто печатается в самом выводе, поэтому я думаю, что этот ответ совершенно верный, посколькуecho
здесь не согласуется (если мы не говорим о конкретной версии).Вы уверены, что находитесь в Bash? У меня работает все четыре способа:
источник
-e
param не существует на всех * nix OSпечать
$''
Строки использовать ANSI C Цитирование :источник
Вы всегда можете сделать
echo ""
.например
источник
echo ""
работает для меня, и я думаю, что это самая простая форма для печати новой строки, даже если это не дает прямого ответа на вопрос. Приветствия.echo -en "\n"
.echo
достаточно, чтобы получить пустую строкуПытаться
работал для меня в
nano
редакторе.Со страницы руководства:
источник
В случае, если кто-то окажется, что бьет себя головой о стену, пытаясь понять, почему сценарий коллеги не будет печатать переводы строк, следите за этим ->
Как и в приведенном выше примере, фактическое выполнение метода само может быть заключено в эхо-сигнал, который заменяет любые эхо-сигналы, которые могут присутствовать в самом методе. Очевидно, я поливал это для краткости, это было не так легко обнаружить!
Затем вы можете сообщить своим товарищам, что лучший способ выполнения функций будет выглядеть так:
источник
Это работает для меня в Raspbian,
источник
POSIX 7 на эхо
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
не определяется, и обратные слэши определяются реализацией:если у вас нет дополнительного расширения XSI.
Поэтому я рекомендую вам использовать
printf
вместо этого, что хорошо указано:Формат файла нотация :
Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют
echo
как:help echo
which echo
что может привести к некоторой путанице.
источник
Просто наберите
чтобы получить новую линию
источник
источник
У меня это работает в CentOS:
источник
Вы также можете сделать:
Это работает как внутри скрипта, так и из командной строки.
В командной строке нажмите Shift+, Enterчтобы сделать разрывы строк внутри строки.
Это работает для меня на моем MacOS и Ubuntu 18.04
источник
Еще одна запись для тех, кто не работал с любым из этих решений и которым необходимо получить возвращаемое значение из их функции:
Только этот трюк работал в Linux, над которым я работал с этим bash:
Надеюсь, это поможет кому-то с подобной проблемой.
источник
Мой сценарий:
Вывод:
На моем скрипте bash я злился как ты, пока не попробовал:
Просто нажмите Enter, где вы хотите вставить этот прыжок. Вывод теперь:
источник
Вы также можете использовать эхо с фигурными скобками,
источник
echo hello; echo world
Это может быть лучше сделано как
Опция -e интерпретирует обратную косую черту для escape-последовательности.
Опция -n удаляет завершающий символ новой строки в выходных данных.
PS: команда echo всегда включает заключительный символ новой строки в выводе, поэтому -n требуется, чтобы отключить эту вещь (и сделать ее менее запутанной)
источник
Существует новое расширение параметр добавлен в
bash 4.4
который интерпретирует управляющие последовательности:источник
Если вы пишете сценарии и несколько раз будете повторять строки как часть других сообщений, хорошим кроссплатформенным решением будет поместить буквенную строку в переменную следующим образом:
источник
Иногда вы можете передать несколько строк, разделенных пробелом, и это будет интерпретировано как
\n
.Например, при использовании сценария оболочки для многострочных уведомлений:
источник
\n
. Он интерпретируется как отдельный аргумент для программы, и сама программа может отображать этот аргумент в новой строке, но это не означает, что он был преобразован\n
в любой момент и полностью зависит от программы.Мне пришлось заключить текст в двойные кавычки при использовании в качестве псевдонима в профиле bash (MacOx, iTerm).
источник
Это привело меня туда ....
Урожайность:
источник
Я просто использую эхо без аргументов
источник
Дополнительное решение:
В случаях, вы должны повторить многострочное из длинного содержимого (например, код / конфигурации)
Например :
echo -e
,printf
Может иметь некоторые ограниченияВы можете использовать специальный символ в качестве заполнителя в качестве разрыва строки (например,
~
) и заменить его после того, как файл был создан с помощьюtr
это должно вызвать другую программу (
tr
), которая должна быть хорошей IMO.источник