echo 0> file.txtとecho 0> file.txtの違いは何ですか?

echo 0> file.txtとecho 0> file.txtの違いは何ですか?

私はこれが次のように振る舞うのを見ました。

[root@divinity test]# echo 0 > file.txt
[root@divinity test]# cat file.txt
0
[root@divinity test]# echo 0> file.txt

[root@divinity test]# cat file.txt

また、含めると期待""通りに動作することも確認しました。

[root@divinity test]# echo 0""> file.txt
[root@divinity test]# cat file.txt
0

私はこれがIOリダイレクトの一部にすぎないと思いますが、echo 0>何が起こっているのかよく理解していません。

答え1

in echo 0 > file.txt(スペースを含む)を使用すると、> file.txtシェルが標準出力をリダイレクトして標準出力に書き込むことができますfile.txt(ファイルがすでに存在する場合はファイルを切り捨てた後)。残りのコマンドは、echo 0リダイレクトが適用された状態で実行されます。

いつリダイレクト演算子区切り文字なしで引用符なしの数字で接頭辞を付けます。リダイレクトは対応するファイル記述子に適用されます。デフォルト値の代わりに。 0 はファイル記述子です。標準入力したがって、0> file.txt標準入力をfile.txt.(1は標準出力、2は標準エラー)にリダイレクトします。この数はリダイレクト演算子の一部と見なされ、もはやコマンド引数の一部ではありませんecho

パラメータにより多くのコンテンツを含めると、これらの現象がより明確に表示されることがわかりますecho

$ echo number 0 > file.txt
$ echo number 0> file.txt
number

number2番目のケースでは、標準出力がリダイレクトされないために発生します。

これらのリダイレクト演算子のバリアントは、標準エラーでより一般的に表示されます2> file.txt

このように標準入力をリダイレクトすると、標準入力から読み取ろうとする実際の試みが中断されます。書き込みを許可しながら実際に標準入力をリダイレクトするには、演算子を使用して次のことを実行できます<>

cat 0<> file.txt

答え2

ファイル記述子0は入力ストリームです。 0> filenameは入力ストリームをfilenameに入れます。 0> filenameはfilenameファイルに0を入れます。間隔に注意してください。

関連情報