4

有人可以向我解释为什么这段代码有效(即 file2.txt 是 file1.txt 的按字母顺序排序的内容):

cat file1.txt | sort > file2.txt

但是当我这样做时,file1.txt 会自行空白......?

cat file1.txt | sort > file1.txt

你可以猜到,我试图简单地按字母顺序对文件的内容进行排序,然后写回同一个文件......

(我使用的是 mac 10.8.3 的终端。写作日期是 19may2013)

4

1 回答 1

7

shellsort在打开file1.txt输出后启动(截断它,即丢弃所有数据)。然后它从cat开放file1.txt阅读开始。shell 的语义使得管道可以从file.txt.不以这种方式运行的)将在cat读取任何数据之前截断文件。

要执行此操作,您必须使用临时文件。(嗯,使用临时文件不是强制性的。如果文件足够小,这样的东西可能会起作用cat file1.txt | ( sleep 2; sort > file1.txt ),但不能保证。)

于 2013-05-19T11:35:37.300 回答