为什么 xargs -n2 的输出应用于相同数量的参数不同,无论是管道还是键盘?

Abd*_*red 4 command-line pipe xargs

当我执行xargs -n2,输入x x x x x并点击时Enter,我只得到 4 倍:

$ xargs -n2
x x x x x 
x x 
x x 
Run Code Online (Sandbox Code Playgroud)

但是,当我通过管道将其x x x x x输入相同的命令时,我会得到相同数量的 x:

$ echo x x x x x | xargs -n2
x x 
x x 
x
Run Code Online (Sandbox Code Playgroud)

为什么在第一种情况下参数的数量要么向上取整要么向下取整?

cha*_*aos 5

在第一行,xargs仍然等待第二个参数或输入的结束。按Ctrl- Dxargs 后继续执行其余操作,您将看到第 5 个x作为单个参数。

这个例子可以解释这种行为:

(echo "x x x x x"; sleep 5; echo "x") | xargs -n2
Run Code Online (Sandbox Code Playgroud)

输出:

x x
x x
x x     # after 5 seconds
Run Code Online (Sandbox Code Playgroud)

x第二个echo语句中的第 6个之后,输入流完成并xargs最终具有第二个参数,但在此之前它等待 5 秒。