管道是一种通信机制,将一个程序的输出变成另一个程序的输入。
xargs是将参数列表转化成小段分段传递给其他命令。
一个简单的例子:
echo '--help' | cat
echo '--help' | xargs cat
这两条命令看起来非常相似。
管道和xargs容易混淆的点也在于,都是将前半段的内容,传递到后半段。到底有什么具体不同呢?
echo '--help' 输出为‘--help’,将其作为cat的输入,是直接cat '--help'么?
不是的。
管道机制本质上是一个特殊的文件。并且是一次性的,数据一旦被读,立即从管道中消除。
假定将管道想象为文件test.txt,那么第一条命令会被解读为:
echo '--help' #输出为‘--help’
| #文件test.txt内容为‘--help’
cat #cat test.txt 输出‘--help’
理解管道之后,再来看第二条命令:
echo '--help' #输出为‘--help’
| #文件test.txt内容为‘--help’
xargs cat #这里会变成什么呢?
根据xargs的的定义,将参数列表……传递给其他命令。
也就是说,我们可以将test.txt的内容当做一个参数列表,然后将列表传递给其他命令,最终执行其他命令。
也就是说,xargs将test.txt的内容,传递给cat命令,最终执行cat命令
也就是说,上述命令中xargs cat 最终执行的是cat '--help'
也就是说,最终执行结果是酱紫的:
一个简单的变形:
echo 'file1' | cat
echo 'file1' | xargs cat
分别会输出什么呢?
第一条会输出'file1',第二条会输出file1的内容
试试吧。