Если у меня есть файл , input.txt
содержащий:
hello
world
!
Затем выполнение команды bash echo $(cat input.txt)
выведет это:
hello world !
Почему и как я могу исправить это выход именно то, что находится в файле, как он находится в файле?
command-line
bash
f.ardelian
источник
источник
echo "$(date) something"
удаляет завершающий символ новой строки из вывода даты, делая так, чтобы эхо выводило дату и «что-то» в одной строке. Если вам нужно сохранить файл или вывод команды «как есть», используйте mapfile (help mapfile
)read -rd ''
или цикл чтения пока.Цитируется со страницы руководства bash, раздел
Command Substitution
:Чуть дальше, тот же раздел:
Вот почему
echo "$(cat /etc/passwd)"
работает.Кроме того, следует иметь в виду, что команда подмена по спецификации POSIX удаляет конечные переводы строк:
Таким образом, вывод файла через
$(cat file.txt)
может привести к потере завершающих строк новой строки, и это может быть проблемой, если целостность всего файла является приоритетом.источник
Вы можете сохранить переводы строк, например, путем установки ИФС для пустых:
источник