私はこれが次のように振る舞うのを見ました。
[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
number
2番目のケースでは、標準出力がリダイレクトされないために発生します。
これらのリダイレクト演算子のバリアントは、標準エラーでより一般的に表示されます2> file.txt
。
このように標準入力をリダイレクトすると、標準入力から読み取ろうとする実際の試みが中断されます。書き込みを許可しながら実際に標準入力をリダイレクトするには、演算子を使用して次のことを実行できます<>
。
cat 0<> file.txt
答え2
ファイル記述子0は入力ストリームです。 0> filenameは入力ストリームをfilenameに入れます。 0> filenameはfilenameファイルに0を入れます。間隔に注意してください。