排序 file.txt > file.txt 为空

sort file.txt > file.txt is empty

我对一个简单的命令有疑问,这是因为在 bash 如果我这样做

sort file.txt > file.txt

file .txt 仍然是空的(它不应该保持 file.txt 之前的内容但已排序)但是如果我这样做

sort file.txt >> file.txt

然后将有序元素添加到前面的元素中。

一旦您使用 > 定位文件,shell 就会在 sort 读取之前截断所有数据。

sort file.txt > tmp.txt && mv tmp.txt file.txt 

这是预期的行为。短语 > file.txt 在命令 sort 甚至 运行 之前打开 file.txt 用于 覆盖 。所以当 sort 运行s 它看到 file.txt 是空的。

另一方面,短语 >> file.txt 打开 file.txt for appending before the command sort even 运行 .因此,当 sort 运行s 时,它会读取完整文件,然后将结果附加到文件中。