我是shell脚本的新手,我想知道管道和过滤器之间的区别。 他们似乎都做同样的事情。甚至格式都是一样的。
ls -l | grep user |cat >user
管道或过滤器?
答案 0 :(得分:8)
下图简要介绍了pipe
,filter
,pipeline
和redirection
的关系。
Filter
只是pipeline
中的一个 ELEMENT ,pipeline
中的所有元素都由pipe
收集。以下是Wikipedia中Filter
的定义。
在Unix和类Unix操作系统中,过滤器是从其标准输入(主输入流)获取大部分数据并将其主要结果写入其标准输出(主输出流)的程序。 Unix过滤器通常用作管道的元素。命令行上的管道操作符(" |")表示左侧命令的主输出作为主输入传递给右侧的命令。
答案 1 :(得分:4)
在您的示例中,整个命令是管道:
ls -l | grep user | cat > user
ls
充当数据来源。然后grep
充当过滤器 - 过滤器对数据执行某种转换。管道(|
)将数据从ls
传递到grep
,执行缓冲等。最后cat
(在您的示例中无关紧要)将过滤后的数据输出到某个位置(终端,文件,变量)。