如何将所有参数分组为 `xargs` 的位置参数

how to group all arguments as position argument for `xargs`

我有一个脚本,它只接受一个位置参数,它是一个值列表,我正在尝试使用 xargs.

从 stdin 获取参数

但是默认情况下,xargs 将所有列表作为位置参数传递到我的脚本,例如做的时候:

echo 1 2 3 | xargs myScript,它本质上是 myScript 1 2 3,而我正在寻找的是 myScript "1 2 3"。实现此目标的最佳方法是什么?

更改分隔符。

$ echo 1 2 3 | xargs -d '\n' printf '%s\n'
1 2 3

尽管并非所有 xargs 实现都有 -d

并且不确定是否有实际用例,但如果需要,您也可以求助于生成另一个 shell 实例。喜欢

$ echo -e '1 2\n3' | xargs sh -c 'printf '\''%s\n'\'' "$*"' sh
1 2 3

如果可以更改输入,则可以执行此操作。但不确定这是不是你想要的。

echo \"1 2 3\"|xargs ./myScript

这是例子。

$ cat myScript 
#!/bin/bash

echo ; shift
echo ; shift
echo ;

$ echo \"1 2 3\"|xargs ./myScript
1 2 3


$ echo 1 2 3|xargs ./myScript
1
2
3