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

Кажется, что новые линейные символы потеряны, хотя они появляются в кавычках.

foo= for i in 1 2 3; do foo="$foo$(printf '\n')$i" done echo "$foo" 123 

Теперь на практике я не хочу добавлять \n до первого элемента, поэтому я бы использовал вместо ${foo:+$(printf '\n')} , но сначала мне нужно выяснить, почему код выше не работает.

2 Solutions collect form web for “Как добавить данные в переменную с помощью \ n в качестве разделителя?”

Подстановка команд удаляет конечные символы новой строки, поэтому $(printf '\n') – это то же самое, что и $(printf '\n\n\n\n') , а именно пустая строка.

Чтобы включить новую строку в строку, поставьте ее в виде одиночных или двойных кавычек.

 for i in 1 2 3; do foo="$foo $i" done 

Вы можете найти менее уродливым, чтобы определить переменную для хранения только новой строки.

 nl=' ' for i in 1 2 3; do foo="$foo$nl$i" done 

В ksh93, bash, FreeBSD sh, mksh и zsh, но не просто sh (пока), вы также можете использовать долларовую одиночную кавычку, которая позволяет использовать обратную косую черту.

 for i in 1 2 3; do foo="$foo"$'\n'"$i" done 

Да, символы новой строки были потеряны, Command Substitution съел их:

Оболочка должна расширять подстановку команд, выполняя команду в среде подсетей (см. Shell Execution Environment) и заменяя подстановку команд (текст команды плюс прилагаемый «$ ()» или backquotes) со стандартным выводом команды, удаляя последовательности одного или нескольких символов <newline> в конце подстановки

Вам не нужен цикл for , просто:

 foo=$(printf '%s\n' 1 2 3) 
  • Crontab Triple Redirect
  • Как установить, какая оболочка использует Midnight Commander?
  • скрипт bash
  • strace не находит функцию оболочки с ошибкой «Can not stat»
  • Используйте файл HERE и перенаправляйте вывод команды
  • Ищете способ превратить несколько команд с одним и тем же параметром в один лайнер
  • Принуждение emacs для запуска с помощью `-nw` при вызове из терминала
  • ksh, выполнить действие при достижении максимального значения цикла
  • Как запустить команду оболочки из .tmux.conf
  • Извлечение каталога из stdout из wget
  • Какова цель ключевого слова «do» в Bash для циклов?
  • Переменная среды для команды, вызванная через nice
  • Linux и Unix - лучшая ОС в мире.