Замена пустого символа не работает внутри скрипта

В сценарии оболочки я попытался заменить пустое пространство на \ n с помощью этой команды

echo -e $var |tr ' ' '\n'

Вне сценария он работал отлично, но внутри эффекта не было. Вот как я использую в сценарии:

var =$(echo -e $var | tr ' ' '\n' )

Спасибо.

1
задан 8 August 2012 в 20:51

2 ответа

После расширения раскрытия параметра ($var) или подстановки команды ($(cmd)) оболочка удаляет все пробелы из расширенного результата, чтобы разделить их на слова (разбиение по словам). Кроме того, он пытается сопоставить имена файлов для слов, которые содержат *, ? и / или [...] (расширение пути). Поэтому всегда заключают расширения в двойные кавычки ("$var" и "$(cmd)"), чтобы избежать разбиения слов и расширения пути.

$ var= 

Отсюда:

echo "$var" | tr ' ' '\n'
# or using bash's more powerful types of parameter expansions
echo "${var// / 

См. Также: http://mywiki.wooledge.org/Quotes

\n'}" var="$(echo "$var" | tr ' ' '\n')"

См. Также: http://mywiki.wooledge.org/Quotes

two\nlines here' $ echo $var two lines here $ echo "$var" two lines here $

Отсюда:

echo "$var" | tr ' ' '\n'
# or using bash's more powerful types of parameter expansions
echo "${var// / 

См. Также: http://mywiki.wooledge.org/Quotes

\n'}" var="$(echo "$var" | tr ' ' '\n')"

См. Также: http://mywiki.wooledge.org/Quotes

0
ответ дан 8 August 2012 в 20:51

Из руководства по Bash (man bash):

Подстановка команды позволяет выводить команду вместо имени команды. Существует две формы:

$ (команда)

или

`команда`

Bash выполняет расширение, выполнив command и заменив команду подстановка стандартным выводом команды, с любыми удаленными завершающими символами новой строки .

Вот почему символы новой строки теряются.

0
ответ дан 8 August 2012 в 20:51

Другие вопросы по тегам:

Похожие вопросы: