我怎样才能让 xargs 与 stdin 一起玩得很好?

Sea*_*red 7 shell io-redirection xargs

$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3
$
Run Code Online (Sandbox Code Playgroud)

seq 1 3用任何在标准输出上每行列出条目的任何命令替换。我怎样才能或多或少地得到您所期望的,即单独行 ( echo 1; echo 2; echo 3;)上的条目?

Joh*_*024 15

通常xargs会在一个命令行上放置多个参数。要将其限制为一次一个参数,请使用以下-n选项:

$ seq 3 | xargs -n 1 echo
1
2
3
Run Code Online (Sandbox Code Playgroud)

文档

来自man xargs

-n max-args
每个命令行最多使用 max-args 参数。如果超出大小(请参阅 -s 选项),将使用少于 max-args 的参数,除非给出 -x 选项,在这种情况下 xargs 将退出。

-n和之间的区别-L

-L是相似的,但有一个额外的功能:与 不同-n,带有尾随空白的行会继续到下一行。观察:

$ echo $'1 \n2\n3\n4'
1 
2
3
4
$ echo $'1 \n2\n3\n4' | xargs -L 1 echo
1 2
3
4
$ echo $'1 \n2\n3\n4' | xargs -n 1 echo
1
2
3
4
Run Code Online (Sandbox Code Playgroud)


Sea*_*red 6

更多的研究揭示了Make xargs 对每一行输入执行一次命令的答案:

$ seq 1 3 | xargs -L 1 echo
1
2
3
Run Code Online (Sandbox Code Playgroud)