linux中xargs和管道命令的区别

最近刚开始学习linux,在学习的过程中发现了一个问题:xargs 和 | 的区别?

在我这个初学者看来,它们俩在字面解释上看是很相似的,| 命令是把前一个命令的标准输出作为后一个命令的标准输入, xargs命令是将标准输入作为后一个命令的参数。百度了一下,发现大家说的对于我来说,理解的有点难。我结合网上的解释,说下自己的理解。

我们先从两个命令看起:

# echo '--help' | cat
# echo '--help' | xargs cat

输出结果:

--help
用法:cat [选项]... [文件]...
将[文件]或标准输入组合输出到标准输出。
  -A, --show-all           等于-vET
  -b, --number-nonblank    对非空输出行编号
  -e                       等于-vE
  -E, --show-ends          在每行结束处显示"$"
  -n, --number             对输出的所有行编号
  -s, --squeeze-blank      不输出多行空行
  -t                       与-vT 等价
  -T, --show-tabs          将跳格字符显示为^I
  -u                       (被忽略)
  -v, --show-nonprinting   使用^ 和M- 引用,除了LFD和 TAB 之外
      --help 显示此帮助信息并退出
      --version 显示版本信息并退出

如果没有指定文件,或者文件为"-",则从标准输入读取。

示例:
  cat f - g  先输出f 的内容,然后输出标准输入的内容,最后输出g 的内容。
  cat        将标准输入的内容复制到标准输出。
......


我们可以看到第一个命令直接打印出来了,第二个命令显示的是cat命令的帮助说明。
# echo '--help' | cat  命令很明显的把字符串 ‘--help’给直接打印出来了,而加了xargs后就相当于 # cat --help 命令,所以 # echo '--help' | xargs cat    ==   # cat --help     

我们再看两个命令:
假设在 /home 目录下有  linux目录   
test.txt  内容如下:
Learning linux

test1.txt  内容如下:
learning english

现在输入两个命令:

# ls | grep 'linux'
# ls | xargs grep "linux"

结果如下:

linux
test.txt:linux

ls命令是打印出当前目录下的所有文件和目录,它的输出结果是 linux  test.txt   text1.txt    管道命令将这个输出交给了grep命令 ,从结果分析,管道命令交给grep的输出被当成了文本来处理的。而加了xargs后,管道命令交给grep的输出被xargs以空白符做定界符切分成很多当个的数据,并作为grep的参数来使用,就等于xargs拿到了ls的输出,并且分隔成单个的字符串,然后帮你写下了   


# gerp "linux"  linux   text.txt    text1.txt


目前我的理解就是管道命令交给下一个命令的输出会被当做文本被处理,而xargs是会被当做后一个命令的参数




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值