目录

用cat命令,是浪费的吗

目录

前不久突然想到一个关于shell的问题: 使用cat file | grep keyword,和grep keyword file到底有什么不同,孰优孰劣?

之后在StackExchange上的一个问答里看到了“UUOC”这个概念。

The purpose of cat is to concatenate (or “catenate”) files. If it’s only one file, concatenating it with nothing at all is a waste of time, and costs you a process.

大体意思就是以cat命令本身设计初衷(连接文件内容),只拿来做一个文件内容的输出,不仅浪费资源,也浪费时间和一个进程。应该使用替代方法就是使用输入重定向<,比如把文件内容给一个变量:a=$(<filename);或者配合文本处理的其他命令:<filename grep keyword等等。

其实“UUOC”这个说法年代也比较久远了,相关的讨论基本上都是十年之前的了,对于软件和硬件的发展来说,这种影响可能会越来越小,对于大多数人的共识是,使用cat来编写,有很高的可读性,代码也更加工整。

但是对于脚本应用场景来说,过于复杂的程序或者性能较差的环境也是一个重要的考量因素,最终的目的是如何更高效地运行,要在多种因素之间做取舍。

这里有一篇性能测试的比对,年代久远了但也可以做一个参考。