为什么要在bash脚本中避免使用管道?

时间:2017-09-06 08:15:22

标签: bash pipe

大多数时候,我看到有人建议在bash脚本中使用管道,有人指出不使用它而只使用一个命令。

示例:

find $dir -name $pattern

而不是

ls $dir | grep $pattern

除了避免使用管道之外还有其他原因吗?

2 个答案:

答案 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