为何wc -l test.txt > test.txt会导致test.txt内容变为0行?
为什么
wc -l test.txt > test.txt会得到0的结果? 你遇到的问题本质是Shell处理重定向的顺序导致的:
- Shell优先处理重定向:当你执行
wc -l test.txt > test.txt时,Shell不会先运行wc命令,而是先处理> test.txt这个重定向操作——它会直接打开test.txt并将文件内容完全清空,为后续写入输出内容做准备。 wc读取的是空文件:等Shell处理完重定向后,才会执行wc -l test.txt命令。这时候test.txt已经被清空了,wc统计到的行数自然是0,最后把这个结果写入已经是空的test.txt里,最终文件内容就变成了0 test.txt。
解决办法
如果要把wc的统计结果写回原文件,需要用临时文件中转,避免直接操作原文件导致的冲突:
wc -l test.txt > temp.txt && mv temp.txt test.txt
执行完这条命令后,test.txt里就会正确显示3 test.txt。
内容的提问来源于stack exchange,提问作者pk192837465
相关产品推荐
相关产品推荐

