将Linux命令的结果做为下一个命令的参数

KISS:keep it short and simple! html

1. 符号:` `
名称:反引号,上分隔符
位置:反引号(`)这个字符通常在键盘的左上角,数字1的左边,不要将其同单引号(’)混淆
做用:反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分
举例: shell

$ echo `date` 
Thu Mar 7 21:31:11 CST 2013

2. $() 
效果同` ` 工具

3. 命令:xargs
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。一般状况下,xargs从管道或者stdin中读取数据,可是它也可以从文件的输出中读取数据。xargs的默认命令是echo,这意味着经过管道传递给xargs的输入将会包含换行和空白,不过经过xargs的处理,换行和空白将被空格取代。 spa

$ date | xargs echo
Thu Mar 7 21:47:12 CST 2013

管道与xargs的区别: .net

  • 管道是实现“将前面的标准输出做为后面的标准输入”
  • xargs是实现“将标准输入做为命令的参数”
4. find命令的-exec参数

xargs:经过缓冲方式并之前面命令行的输出做为参数,随后的命令调用该参数
若忽略 xargs 的 options 来看的话,
cm1 | xargs cm2
能够单纯当作: cm2 `cm1`
所以, find .... | xargs rm 也可做 rm `find ...` 来处理.
然而, 若 find 的结果太多, 可能会超过rm 可能接受的最大argument数量而失败.
xargs优势:因为是批处理的,因此执行效率比较高(经过缓冲方式)
xargs缺点:有可能因为参数数量过多(成千上万),致使后面的命令执行失败
若换成 find .... -exec   rm {} \; 的话, 
由于rm 是" 逐个 " item 去处理的, 则无此忧虑
命令行

参考:

如何将Linux命令的结果做为下一个命令的参数
Linux xargs命令
管道命令和xargs的区别(经典解释)
exec 与 xargs的区别

相关文章
相关标签/搜索