xargs与管道,组合多个命令

管道是一种通信机制,将一个程序的输出变成另一个程序的输入。

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'

也就是说,最终执行结果是酱紫的:

xargs与管道,组合多个命令

一个简单的变形:

echo 'file1' | cat
echo 'file1' | xargs cat

 分别会输出什么呢?

第一条会输出'file1',第二条会输出file1的内容

试试吧。