あなたが望むすべてをリダイレクトすることができますが、それで 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
ますか?