Как получить перевод строки в sh? - PullRequest
278 голосов
/ 09 июня 2010

Этот

STR="Hello\nWorld"
echo $STR

выводит в качестве вывода

Hello\nWorld

вместо

Hello
World

Что мне нужно сделать, чтобы в строке была новая строка?

Примечание: Этот вопрос не о эхо . Мне известно о echo -e, но я ищу решение, которое позволяет передавать строку (которая включает в себясимвол новой строки) в качестве аргумента других команд , которые не имеют аналогичной возможности интерпретировать \n как символы новой строки.

Ответы [ 11 ]

0 голосов
/ 22 октября 2017

В моей системе (Ubuntu 17.10) ваш пример работает так, как нужно, как при вводе из командной строки (в sh), так и при выполнении в виде скрипта sh:

[bash]§ sh
$ STR="Hello\nWorld"
$ echo $STR
Hello
World
$ exit
[bash]§ echo "STR=\"Hello\nWorld\"
> echo \$STR" > test-str.sh
[bash]§ cat test-str.sh 
STR="Hello\nWorld"
echo $STR
[bash]§ sh test-str.sh 
Hello
World

Полагаю, это отвечает на ваш вопрос: это просто работает. (Я не пытался выяснить детали, например, в какой момент именно замена символа новой строки на \n происходит в sh).

Однако я заметил, что этот же скрипт будет работать по-разному при выполнении с bash и вместо этого выведет Hello\nWorld:

[bash]§ bash test-str.sh
Hello\nWorld

Мне удалось получить желаемый результат с помощью bash следующим образом:

[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"

Обратите внимание на двойные кавычки вокруг $STR. Это ведет себя идентично, если сохранено и запущено как bash скрипт.

Следующее также дает желаемый результат:

[bash]§ echo "Hello
> World"
...