Почему в большинстве случаев из переменных в Bash удаляется перевод строки в конце? [дубликат]

На этот вопрос уже есть ответ здесь:

Я изо всех сил пытаюсь понять, почему перевод строки в конце сохраняется только в одном из следующих случаев. См. Сценарий:

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]

Я ожидал, что в первом не будет новой строки, в четвертом и шестом - в иметь по два перевода строки в каждом, а остальные - по одному символу перевода строки. Но вместо этого только второй имеет перевод строки.

Что происходит, пожалуйста?

0
задан 29 August 2018 в 02:21

1 ответ

Как зарегистрировано в man bash под Заменой Команды, полужирной шахтой акцента:

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

2
ответ дан 28 October 2019 в 01:56

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

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