sort file1 -o file2
和sort file1 > file2
之间有什么区别?到目前为止,我做了同样的事情,但也许我错过了一些东西。
答案 0 :(得分:4)
只要file1
和file2
不同,以下两个命令就相似。
sort file1 -o file2 # Output redirection within sort command
sort file1 > file2 # Output redirection via shell
让我们看看输入和输出文件相同file
时会发生什么,即您尝试就地排序
sort file -o file # Works perfectly fine and does in-place sorting
sort file > file # Surprise! Generates empty file. Data is lost :(
总之,以上两种重定向方法相似但不相同
测试
$ cat file
2
5
1
4
3
$ sort file -o file
$ cat file
1
2
3
4
5
$ sort file > file
$ cat file
$ ls -s file
0 file
答案 1 :(得分:2)
结果相同但在-o file2
的情况下,结果文件由sort
直接创建,而在另一种情况下,它由bash
创建并填充标准输出sort
。 coreutils中xfopen
第450行中定义的sort.c
同等对待这两种情况(stdout
和-o filename
)。
重定向sort
的标准输出更为通用,因为它可以重定向到另一个程序,而|
代替>
-o
选项更难做(但并非不可能)
-o
选项对于就地排序很方便,因为重定向到同一文件会导致截断文件,因为它是在调用sort
之前由shell创建(并截断)的
答案 2 :(得分:1)
没有太大区别>
是标准的unix输出重定向功能。也就是说'将您将在终端上显示的输出写入给定文件'-o选项更具体于sort函数。这是一种再次说“将输出写入此给定文件”的方法
>
可以在工具没有专门具有写入文件参数或选项的情况下使用。