$ 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
,因此没有效果。