在 linux 中带大括号和不带大括号的差异是什么?

24 linux centos xargs

我想知道这有什么区别

ls | xargs rm

ls | xargs -i{} rm {}

两者都为我工作

Shi*_*dim 28

xargs rmrm使用所有参数作为参数调用,并以空格分隔。

xargs -i{} rm {}将为rm {}每个参数调用,{}并将被当前参数替换。

如果您有 2 个参数a.txtand b.txtxargs rm 将调用它

rm a.txt b.txt
Run Code Online (Sandbox Code Playgroud)

但是xargs -i{} rm {}会叫

rm a.txt
rm b.txt
Run Code Online (Sandbox Code Playgroud)

这是因为-i选项隐含了-L 1选项,这意味着该命令每次rm只占用1一行。这里每一行只包含 1 个参数。

查看此Ideone 链接以了解更多相关信息。

  • @user19140477031 取决于您正在执行的操作。对于 `rm` 没关系 (2认同)

小智 6

-ioption (相当于--replace)创建一种占位符,其中 xargs 存储刚刚收到的输入。在第二个命令中,占位符是{},它的作用类似于 find-exec选项。定义后,xargs 将用整行输入替换此占位符。如果您不喜欢\xe2\x80\x99 这个{}名称,您可以定义自己的名称:

\n
ls | xargs  -iPLACEHOLDER echo PLACEHOLDER\n
Run Code Online (Sandbox Code Playgroud)\n

在您的情况下,两个命令都会产生相同的结果。在第二种形式中,您只是使用该-I选项明确显示默认行为。

\n