管道与xargs

假设当前目录下有3个文件: a.txt、b.txt、c.txt
它们的内容如下
a.txt:

ha ha ha
i am a.txt

b.txt:

ha ha ha
i am b.txt

c.txt:

ha ha ha
i am c.txt

1)执行:

>ls

输出

a.txt  b.txt  c.txt

2)执行

>ls | cat

输出

a.txt
b.txt
c.txt

3)执行

>ls | echo

输出
(输出空行)



4)执行

>ls | xargs echo

输出

a.txt  b.txt  c.txt

5)执行

>ls | xargs cat

输出

ha ha ha
i am a.txt
ha ha ha
i am b.txt
ha ha ha
i am c.txt




分析:
管道其实是一个共享文件,又叫pipe文件。
前一个命令本来要输出到终端的内容,输入到了pipe文件中。
然后后一个命令再把pipe文件作为一个参数。

而xargs 则是把pipe文件的内容作为参数。

例如:
ls | cat
其实相当于 ls > 管道文件 ; cat 管道文件

ls | echo
其实相当于 ls > 管道文件 ; echo 管道文件

cat 文件名 是显示文件的内容
echo 文件名 就只是显示文件名
所以:
ls | cat 相当于显示管道文件的内容
ls | echo 相当于显示管道文件的文件名,管道文件是没名字的,所以就什么也不显示了

而 xargs 可以把管道文件的内容转换为参数
所以:
ls | xargs echo 会显示 当前目录下的文件名

而 ls | xargs cat 会显示当前目录下所有文件的内容

posted @ 2022-04-19 18:17  enbug  阅读(56)  评论(0编辑  收藏  举报