管道和过滤器之间的差异?

时间:2014-03-14 12:03:35

标签: bash shell

我是shell脚本的新手,我想知道管道和过滤器之间的区别。 他们似乎都做同样的事情。甚至格式都是一样的。

ls -l | grep user |cat >user

管道或过滤器?

2 个答案:

答案 0 :(得分:8)

下图简要介绍了pipefilterpipelineredirection的关系。

pipeline

Filter只是pipeline中的一个 ELEMENT pipeline中的所有元素都由pipe收集。以下是WikipediaFilter的定义。

  

在Unix和类Unix操作系统中,过滤器是从其标准输入(主输入流)获取大部分数据并将其主要结果写入其标准输出(主输出流)的程序。 Unix过滤器通常用作管道的元素。命令行上的管道操作符(" |")表示左侧命令的主输出作为主输入传递给右侧的命令。

答案 1 :(得分:4)

在您的示例中,整个命令是管道:

 ls -l | grep user | cat > user

ls充当数据来源。然后grep充当过滤器 - 过滤器对数据执行某种转换。管道(|)将数据从ls传递到grep,执行缓冲等。最后cat(在您的示例中无关紧要)将过滤后的数据输出到某个位置(终端,文件,变量)。