В сценарии оболочки я попытался заменить пустое пространство на \ n с помощью этой команды
echo -e $var |tr ' ' '\n'
Вне сценария он работал отлично, но внутри эффекта не было. Вот как я использую в сценарии:
var =$(echo -e $var | tr ' ' '\n' )
Спасибо.
После расширения раскрытия параметра ($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
Из руководства по Bash (man bash
):
Подстановка команды позволяет выводить команду вместо имени команды. Существует две формы:
$ (команда)
или
`команда`
Bash выполняет расширение, выполнив
blockquote>command
и заменив команду подстановка стандартным выводом команды, с любыми удаленными завершающими символами новой строки .Вот почему символы новой строки теряются.