大多数时候,我看到有人建议在bash脚本中使用管道,有人指出不使用它而只使用一个命令。
示例:
find $dir -name $pattern
而不是
ls $dir | grep $pattern
除了避免使用管道之外还有其他原因吗?
答案 0 :(得分:1)
管道本身没有任何问题。应该避免的是无用的fork()
,这意味着启动一个过程是一个相对耗时的事情。
如果可以在一个过程中完成某些操作,那通常比使用两个过程获得相同的结果更好。
答案 1 :(得分:1)
因为管道创建了一个新流程。在您的示例中,ls和grep是两个进程,find是一个。一个或多个管道使命令变慢。一个简单的例子:
$ 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