Команда Bash echo не использует экранированный символ - PullRequest
2 голосов
/ 10 января 2012

Команда bash echo не использует экранированные символы, такие как "\ n" и "\ t"

echo "This is test string\nAnd this is next line"

Для указанного выше ввода отображается

This is test string\nAnd this is next line

Так как мне печатать на следующей строке?

Ответы [ 4 ]

11 голосов
/ 10 января 2012

Вам нужно echo -e, если вы хотите расширить экранированные символы:

$ echo -e "This is test string\nAnd this is next line"
This is test string 
And this is next line
6 голосов
/ 10 января 2012
$ echo $'This is test string\nAnd this is next line'
This is test string
And this is next line

ANSI-C Цитирование

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

4 голосов
/ 10 января 2012

Команда echo сильно различается - некоторые реализации интерпретируют управляющие символы в своих аргументах, некоторые - нет, если вы не добавите параметр -e ... некоторые выводят «-e» как часть их вывода если вы попытаетесь использовать его в качестве опции. Если вы хотите получить предсказуемые результаты, когда делаете что-то нетривиальное, используйте вместо этого printf (обратите внимание, что вы должны явно включить конечный перевод строки):

printf "This is test string\nAnd this is next line\n"

Я усвоил этот урок нелегким путем, когда OS X v10.5 вышла с версией bash со встроенным echo, которая сломала кучу моих скриптов, которые прекрасно работали под v10.4 ...

0 голосов
/ 10 января 2012

Вы можете использовать echo -e или использовать встроенную shopt таким образом в начале вашего скрипта:

shopt -s xpg_echo
...
echo "hello world\n"
...