“xargs”和命令替换之间的区别?

Modified on: Sat, 09 Jun 2018 10:35:23 +0800

在许多情况下,我使用命令替换而不是xargs。例如rm $(ls)ls | xargs rm

它们之间究竟有什么区别?

我认为其中一个区别是命令替换在子shell中运行,而xargs在当前shell中运行,但我不确定。

请列出差异。

作者:jokerdino,Sinoosh

最佳答案

一个区别是,当使用命令替换而不是管道时,传递的数据大小受命令缓冲区大小的限制,因此在某些情况下会被截断而没有警告。这也意味着必须在传递给下一个命令之前生成并存储整个命令输出,因此对于大输出,您可以使用比必要更多的内存。

第一种方法的另一个问题是输出是在空白上拆分的,因此您无法处理其中包含空格的文件名。 xargs也受到空白问题的影响,但可以通过更改使用的分隔符来修复它。要顺便处理文件名,您需要在第二个示例中使用空字节作为分隔符。

第三个问题是扩展了globs,因此如果文件名称中包含星号或问号,则会出现意外结果。

您可以在此处找到关于此问题的精彩讨论:http://mywiki.wooledge.org/ParsingLs一>

正确的语法是

echo rm *

或者如果你必须使用xargs,

find . -maxdepth 1 -print0 | xargs -0 echo rm

当输出看起来正确时,删除echo

作者:,user000001

相关问答

添加新评论