设想:
$ cat t0.txt
xxx
$ grep xxx t0.txt > t0.txt
grep: t0.txt: input file is also the output
# exit status 2
$ cat t0.txt
<nothing>
问题:如果输入文件也是输出并且存在状态是2
(发生错误),那么为什么要清除输入文件?
答案1
shell 重定向首先发生;所以首先 shell 清空你的输出文件,t0.txt
然后它传递到grep
然后grep
抱怨输入和输出是相同的; grep 如何知道它们是相同的(?),因为它检查inode
输入和输出文件的编号(请参阅源代码在这里/第1377~1403行)。
不幸的是,您t0.txt
因此丢失了内容。