ファイルの内容を「echo」コマンドにリダイレクトする

ファイルの内容を「echo」コマンドにリダイレクトする

my_file.txt内容が文字列のファイルがありますHello。その内容をコマンドにリダイレクトするにはどうすればよいですかecho

私はそのコマンドを持っていることを知っていますが、lessそれを実行するにはそのコマンドを使用する必要があります。catmoreecho

私はこれを試しました:

$ cat my_file.txt | echo

これ:

$ echo < my_file.txt

ただし、どちらの場合も、標準出力では空白としてのみ表示され、my_file.txtの内容は表示されません。

どうすればいいですか?

ベストアンサー1

必要なものをすべてリダイレクトできますが、 echo何もしません。echo標準入力を読みません。標準出力に書き込むのがすべてです。議論空白文字で区切られ、改行文字で終了します(そして、いくつかの実装echoでは、拡張されたエスケープシーケンスが提供または-オプションとして扱われる引数で始まります)。

echoファイルの内容を表示するには、その内容をecho次のパラメーターに渡す必要があります。

echo "$(cat my_file.txt)"

末尾$(...)の改行文字は削除されます。Sこのコマンドの出力からcat追加echo一つ退いてください。

また、以外のzshコマンドの引数としてNUL文字を渡すことはできないため、上記のコマンドは通常バイナリファイルでは機能しません。yash有効な文字の一部を形成しないバイトも削除されます。

これを行う理由がechoファイル内で\n、、...エスケープシーケンスを拡張するためである場合\b(UNIX一貫性実装と同様に、\0351echoしかし、すべてではありません)、その後printfむしろ使用しますか?:

printf '%b\n' "$(cat my_file.txt)"

対照的にecho、ファイルの内容が-


代わり$(cat file)kshzshおよびを使用してbash次のこともできます。$(<file)。これは特殊演算子です。シェルcat拡張を補うためにファイルの内容を読むのとは対照的です。それでも追加のプロセスを作成することを除いて、末尾の改行を削除してNULバイトをブロックしますzshbashまた、1つの違いは、この方法でディレクトリタイプファイルを読み取ろうとするとエラーが発生しないことです。また、$(< file)特別ですが(他のシェルをエミュレートしない場合は、以下を実行して拡張されるわけでは$(< file; other command)ありません)zshfile絶対的な $READNULLCMDコマンド(通常ポケットベル))。

おすすめ記事