Даш, подстановка команд не вставляет перевод строки?

В основном, это проблема:

$ echo Hello"$(printf '\n')"World
HelloWorld

Что я упустил из виду?

1
задан 5 June 2018 в 02:27

1 ответ

Это поведение является на самом деле частью спецификации POSIX для замены команды:

Оболочка должна развернуть замену команды путем выполнения команды в подсреде оболочки (см. Среду выполнения Shell), и замена замены команды (текст команды плюс включение "$ ()" или одинарные левые кавычки) со стандартным выводом команды, удаляя последовательности одного или нескольких символов в конце замены. Встроенные символы до конца вывода не должны быть удалены; однако, их можно рассматривать как разделители полей и устранить во время полевого разделения, в зависимости от значения IFS и заключения в кавычки, которое является в действительности. Если вывод содержит какие-либо пустые байты, поведение является неуказанным.

Так нормальное правило заключения в кавычки "$(...)" только сохраняет незапаздывание новых строк.

Некоторые предложения для сохранения запаздывания новых строк даны в оболочке: продолжайте запаздывать новые строки ('\n') в замене команды

См. также При печати переменной, которая содержит новые строки, почему последняя новая строка разделяется? для обсуждения объяснения позади спецификации.

2
ответ дан 7 December 2019 в 13:23

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

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