あなたが望むすべてをリダイレクトすることができますが、それで echo何もしません。echo標準入力を読み取りません。スペース文字で区切られ、改行文字で終了する引数を標準出力に書き込むだけです(さらに、一部のecho実装ではエスケープシーケンスを展開したり-、オプションとして処理される引数で始まるものもあります)。
echoファイルのコンテンツを表示したい場合は、そのコンテンツを引数としてに渡す必要がありますecho。何かのようなもの:
echo "$(cat my_file.txt)"
そのコマンドの出力から$(...)末尾の改行文字sを取り除きcat、1つecho追加することに注意してください。
また、を除いてzsh、コマンドの引数にNUL文字を渡すことはできないため、上記は通常バイナリファイルでは機能しません。yash有効な文字の一部を形成しないバイトも削除します。
それをやりたいと思った理由は、あなたがしたいのであればecho展開する\n、\b、\0351...(UNIX準拠としてファイルにエスケープシーケンスをecho実装がそう、すべてではないが)、その後、あなたはむしろ使用したいprintfの代わりに:
printf '%b\n' "$(cat my_file.txt)"
反対にecho、そのファイルは移植性があり、ファイルのコンテンツがで始まっていても問題はありません-。
する代わりに$(cat file)、とksh、zshとbash、1にも行うことができます$(<file)。これは、シェルcatがファイルの内容を読み取って展開を構成する特別な演算子です。を除き、NULバイトの末尾の改行とチョークを削除しますzsh。ではbash、まだ追加のプロセスがフォークされています。また、1つの違いは、ディレクトリタイプのファイルをそのように読み取ろうとしてもエラーが発生しないことです。また、while $(< file)は特別です$(< file; other command)が、(zsh他のシェルをエミュレートしない場合file、暗黙的な $READNULLCMDコマンド(通常はページャー)を実行することにより、のコンテンツを展開します)ではありません。
echoますか?