На этот вопрос уже есть ответ здесь:
Я изо всех сил пытаюсь понять, почему перевод строки в конце сохраняется только в одном из следующих случаев. См. Сценарий:
declare -a B
B[1]='foo'
B[2]=$'foo\n'
B[3]="$( echo 'foo' )"
B[4]="$( echo -e 'foo\n' )"
B[5]="$( printf '%s\n' 'foo' )"
B[6]="$( cat <<END
foo
END
)"
# Print each value.
for RESULT in "${B[@]}"
do
echo "[${RESULT}]"
done
И результат при запуске:
[foo]
[foo
]
[foo]
[foo]
[foo]
[foo]
Я ожидал, что в первом не будет новой строки, в четвертом и шестом - в иметь по два перевода строки в каждом, а остальные - по одному символу перевода строки. Но вместо этого только второй имеет перевод строки.
Что происходит, пожалуйста?
Как зарегистрировано в man bash
под Заменой Команды, полужирной шахтой акцента:
Bash выполняет расширение путем выполнения
command
и замена замены команды со стандартным выводом команды, с любыми запаздывающими удаленными новыми строками.