为什么 SmartOS (SunOS) 上的“xargs -n”的行为与其他实现不同?

为什么 SmartOS (SunOS) 上的“xargs -n”的行为与其他实现不同?

似乎-nSmartOS(我认为是 Solaris)中发现的 xargs 选项的行为与我遇到的任何其他版本的 xargs 都不一样。

举个例子:

内置 /usr/bin/xargs (奇怪的行为):

# printf 'one\0two\0three' | xargs -0 -I{} -n 1 echo "- {}"
- {} one
- {} two
- {} three

GNU Findutils /opt/local/bin/xargs (预期行为):

# printf 'one\0two\0three' | /opt/local/bin/xargs -0 -I{} -n 1 echo "- {}"
- one
- two
- three

MacOS、NetBSD 和 CentOS 中的 Xargs 的行为均与上一个示例相同。 SmartOS xargs 有什么不同?

来自 SmartOS xargs 联机帮助页:

   -n number
                  Invokes utility using as many standard input arguments
                  as possible, up to number (a positive decimal integer)
                  arguments maximum. Fewer arguments are used if:

                      o      The command line length accumulated exceeds
                             the size specified by the -s option (or
                             {LINE_MAX} if there is no -s option), or

                      o      The last iteration has fewer than number, but
                             not zero, operands remaining.

来自 Gnu Findutils xargs 联机帮助页:

   -n max-args, --max-args=max-args
          Use at most max-args arguments per command line.  Fewer than max-args arguments will be used if the size (see the -s option) is  exceeded,  un‐
          less the -x option is given, in which case xargs will exit.

我在移植 shell 脚本时发现了这种差异,我很好奇是否有人知道为什么行为不同。

答案1

您不能组合-I-n选项。这就是标准说:

-I-L和选项-n是互斥的。如果在命令行上给出了多个,则某些实现会使用最后指定的一个;其他实现以不同的方式处理选项的组合。

也可以看看

相关内容