`cat foo | sed 's/bar/qux/'` > foo`はなぜfooの内容を削除するのですか? [コピー]

`cat foo | sed 's/bar/qux/'` > foo`はなぜfooの内容を削除するのですか? [コピー]
$ cd /tmp
$ echo bar > foo
$ cat foo
bar
$ cat foo | sed 's/bar/qux/'
qux
$ cat foo | sed 's/bar/qux/' > foo
$ cat foo

最後に、cat fooファイルの内容が削除されたことを示します。なぜそんなことですか?

答え1

I / Oリダイレクトは、> fooコマンドを実行する前にシェルによって処理されます。シェルは書き込みfoo用にファイルを開き、前の内容を消去してからコマンドを実行します。あなたの場合はcat foo | sed 's/bar/qux/'空のファイルが使用されるため、foo何の効果もありません。

関連情報