Вы можете перенаправить все, что хотите, echo
но с этим ничего не поделаешь. echo
не читает свой стандартный ввод. Все, что он делает, это записывает в стандартный вывод свои аргументы, разделенные символом пробела и оканчивающиеся символом новой строки (и с некоторыми echo
реализациями с некоторыми escape-последовательностями в них, расширенными и / или аргументами, начинающимися с, -
возможно, обработанными как опции).
Если вы хотите echo
отобразить содержимое файла, вы должны передать это содержимое в качестве аргумента echo
. Что-то типа:
echo "$(cat my_file.txt)"
Обратите внимание , что $(...)
полосы тянущейся символ новой строки с с выхода этой cat
команды, и echo
добавляет одну задние.
Также обратите внимание, что кроме как zsh
, вы не можете передавать NUL-символы в аргументах команды, так что описанное выше обычно не работает с двоичными файлами. yash
также удалит байты, которые не являются частью допустимых символов.
Если причина для желания сделать это потому , что вы хотите , echo
чтобы расширить \n
, \b
, \0351
... экранирующие последовательности в файле (в UNIX совместимые echo
реализации делают, но не все ), то вы бы лучше использовать printf
вместо :
printf '%b\n' "$(cat my_file.txt)"
В отличие от echo
этого, он является переносимым и не будет иметь проблем, если содержимое файла начинается с -
.
В качестве альтернативы $(cat file)
, с ksh
, zsh
и bash
, можно также сделать:$(<file)
. Это специальный оператор, в котором оболочка вместо cat
содержимого читает файл для расширения. Он по-прежнему удаляет завершающие символы новой строки и заглушает байты NUL, кроме как в zsh
. В том bash
, что все еще разветвляется дополнительный процесс. Также обратите внимание, что одно отличие состоит в том, что вы не получите никакой ошибки, если попытаетесь прочитать файл типа directory таким образом. Кроме того, хотя он $(< file)
является особенным, $(< file; other command)
это не так ( zsh
если не эмулировать другую оболочку, это все равно расширило бы содержимое file
, выполнив неявную $READNULLCMD
команду (обычно это пейджер)).
echo
?