大多数时候我看到有人建议在bash脚本中使用管道,有人指出不使用它,而仅使用一个命令。
示例:
find $dir -name $pattern
而不是
ls $dir | grep $pattern
有其他原因比避免管道?
管道本身没有错。应该避免的是毫无用处的fork()
,这意味着开始一个过程是相对耗时的事情。
如果可以在一个过程中完成某些操作,通常比使用两个过程以相同的结果要好。
因为管道创建一个新的过程。在您的示例中,LS和GREP是两个过程,找到一个。一个或多个管道使命令较慢。一个微不足道的例子:
$ time find Downloads -name *.pdf &>/dev/null
real 0m0.019s
user 0m0.012s
sys 0m0.004s
$ time ls Downloads | grep pdf &>/dev/null
real 0m0.021s
user 0m0.012s
sys 0m0.004s