为什么`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由 shell 在执行命令之前处理。 shell 打开文件foo进行写入,擦除以前的内容,然后执行命令。在您的情况下,cat foo | sed 's/bar/qux/'使用空文件foo,因此没有效果。

相关内容