В Bash, попробовал следующее:
echo -e "hello\nworld"
Но он не печатает новую строку, только \n
. Как я могу сделать печать новой строки?
Я использую Ubuntu 11.04.
Вместо printf
можно использовать
printf "hello\nworld\n"
printf
имеет более последовательное поведение, чем echo
. Поведение echo
сильно варьируется между разными версиями.
printf %"s\n" hello world
- printf повторно использует формат, если задано слишком много аргументов
Вы уверены, что находитесь в bash? Работает для меня всеми тремя способами:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
-e
param не существует на всех * nix ОС
echo $'hello\nworld'
печатает
hello
world
$''
строки используют ANSI C Quoting:
Слова вида
$'string'
рассматриваются специально. Слово расширяется до string, при этом символы с обратным слэшем-экранированием заменяются в соответствии со стандартом ANSI C.
Вы всегда можете сделать echo ""
.
например.
echo "Hello"
echo ""
echo "World"
echo ""
работает для меня, и я думаю, что это самая простая форма для печати новой строки, даже если это не дает прямого ответа на вопрос. Приветствия.
echo -en "\n"
.
В случайном случае, когда кто-то обнаруживает, что они бьют головой о стену, пытаясь понять, почему сотрудник script не будет печатать новые строки, обратите внимание на это →
#!/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"
POSIX 7 на эхо
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
не определен, а обратные слэши определены реализацией:
Если первым операндом является -n, или если какой-либо из операндов содержит символ < обратная слэша, результаты определяются по реализации.
если у вас нет дополнительного расширения XSI.
Поэтому используйте printf
:
Оператор форматадолжен использоваться как строка формата, описанная в XBD Format Format Notation [...]
\n <newline> Переместите позицию печати в начало следующей строки.
Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют echo
как:
help echo
which echo
что может привести к некоторой путанице.
str='hello\nworld'
$ echo | sed "i$str"
hello
world
Еще одна запись здесь для тех, кто не помог ни с одним из этих решений, и должен получить возвращаемое значение из своей функции:
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)
Надеюсь, что это поможет кому-то с подобной проблемой.
Мой script:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
Вывод:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
На моем bash script я злился, пока я только что пробовал:
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 требуется отключить эту вещь (и сделать ее менее запутанной)
Вы также можете использовать эхо с фигурными скобками,
$ (echo hello; echo world)
hello
world
echo hello; echo world
Вы также можете сделать:
echo "hello
world"
Это работает для меня на моем macOS.
Я не мог получить какие-либо предложения в этом ответе, потому что, как оказалось, я пытался использовать его в функции, которая возвращает значение, и все сообщения echo (и printf) в этой функции были добавляется к возвращаемому значению после индивидуального удаления строк новой строки.
Вот вопрос относительно этого, с очень тщательным ответом:
Это было похоже на трехчасовой тайный тур.
Это работает для меня в CentOS:
echo -e ""hello\nworld""
В bash 4.4
добавлено новое расширение параметров, которое интерпретирует escape-последовательности:
${parameter@operator} - E operator
Расширение - это строка, которая представляет собой значение параметра с последовательностями escape-лака с обратной косой чертой, как и механизм
$'…'
цитирования.
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
Иногда вы можете передать несколько строк, разделенных пробелом, и будет интерпретироваться как \n
.
Например, при использовании сценария оболочки для многострочных уведомлений:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now ''date +"%s"'
\n
. Он интерпретируется как отдельный аргумент для программы, и сама программа может отображать этот аргумент в новой строке, но это не означает, что он был преобразован в \n
в любой момент и полностью зависит от программы.