虽然我知道像这样的程序mv
需要一个实际的文件名作为参数,但像这样的程序sort
可以只是从标准输入读取和写入标准输出,names | sort > names
而不是使用文件名并提供诸如-o
:之类的选项sort names -o names
。
那么这背后的原因是什么呢?
答案1
简而言之,它为程序提供了更大的灵活性和易用性,只需很少的额外编程。那么为什么不呢?
大多数以适用方式运行的核心实用程序都具有该功能。我不是 Perl 程序员,但我相信 Diamond 运算符的<>
行为方式相同 - 如果文件存在于命令行上,则从文件中读取,否则从 stdin 中读取)。我似乎还记得 Larry 说过,perl 脚本可以相当轻松地模拟该功能中的核心实用程序。
更重要的是,它允许程序同时处理多个文件,并且可以区分它们。使用 cat,你不能做到这一点。如果没有名称,您就无法拥有内联 ( sed -i
) 或基于文件 ( wc
) 进行区分的实用程序。它看起来也更干净(IMO):sort file -o sorted
与cat file | sort > sorted
or sort <file >sorted
(顺便说一句,它不能正确内联工作,读取和写入相同的文件)。