为什么一个Linuxredirect截断该文件?

我有一个名为“test.txt”的文件:

hello world 

它只是一个'你好世界'的string。 如果我使用perl正则expression式:

 perl -pe "s/hello/bye/g" test.txt 

它说:

 bye world 

但如果我尝试将该文件redirect到自己:

 perl -pe "s/hello/bye/g" test.txt > test.txt 

结果文件是空的。 为什么? 我怎样才能过滤一个正则expression式的文件?

perl接受inplace的参数-i 。 有了这个,你可以用perl程序处理一个文件,并立即把它写回来。

它会在应用程序有机会从中读取数据之前,由于重定向而打开文件。 重定向到一个临时文件,然后重命名它。

重定向发生在shell解析你的命令行的时候。 这发生在执行实际命令之前,因此在您有机会读取文件之前,您重定向到的文件将被覆盖。