my_file.txt
内容が文字列のファイルがありますHello
。その内容をコマンドにリダイレクトするにはどうすればよいですかecho
?
私はそのコマンドを持っていることを知っていますが、less
それを実行するにはそのコマンドを使用する必要があります。cat
more
echo
私はこれを試しました:
$ 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一貫性実装と同様に、\0351
echo
しかし、すべてではありません)、その後printf
むしろ使用しますか?:
printf '%b\n' "$(cat my_file.txt)"
対照的にecho
、ファイルの内容が-
。
代わり$(cat file)
にksh
、zsh
およびを使用してbash
次のこともできます。$(<file)
。これは特殊演算子です。シェルcat
拡張を補うためにファイルの内容を読むのとは対照的です。それでも追加のプロセスを作成することを除いて、末尾の改行を削除してNULバイトをブロックしますzsh
。bash
また、1つの違いは、この方法でディレクトリタイプファイルを読み取ろうとするとエラーが発生しないことです。また、$(< file)
特別ですが(他のシェルをエミュレートしない場合は、以下を実行して拡張されるわけでは$(< file; other command)
ありません)zsh
file
絶対的な $READNULLCMD
コマンド(通常ポケットベル))。