为什么不只使用标准流而不是使用文件名?

为什么不只使用标准流而不是使用文件名?

虽然我知道像这样的程序mv需要一个实际的文件名作为参数,但像这样的程序sort可以只是从标准输入读取写入标准输出,names | sort > names而不是使用文件名并提供诸如-o:之类的选项sort names -o names

那么这背后的原因是什么呢?

答案1

简而言之,它为程序提供了更大的灵活性和易用性,只需很少的额外编程。那么为什么不呢?

大多数以适用方式运行的核心实用程序都具有该功能。我不是 Perl 程序员,但我相信 Diamond 运算符的<>行为方式相同 - 如果文件存在于命令行上,则从文件中读取,否则从 stdin 中读取)。我似乎还记得 Larry 说过,perl 脚本可以相当轻松地模拟该功能中的核心实用程序。

更重要的是,它允许程序同时处理多个文件,并且可以区分它们。使用 cat,你不能做到这一点。如果没有名称,您就无法拥有内联 ( sed -i) 或基于文件 ( wc) 进行区分的实用程序。它看起来也更干净(IMO):sort file -o sortedcat file | sort > sortedor sort <file >sorted(顺便说一句,它不能正确内联工作,读取和写入相同的文件)。

相关内容