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

Shell 如何将所有参数分组为`xargs的位置参数`,shell,command-line,xargs,Shell,Command Line,Xargs,我有一个脚本,它只接受一个位置参数,这是一个值列表,我正在尝试使用xargs从stdin获取参数 但是,默认情况下,xargs将所有列表作为位置参数传递给我的脚本,例如执行以下操作时: echo 12 3 | xargs myScript,它本质上就是myScript 12 3,我要找的是myScript“12 3”。实现此目的的最佳方法是什么?更改分隔符 $ echo 1 2 3 | xargs -d '\n' printf '%s\n' 1 2 3 但并非所有xargs实现都有-d 并且不

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

但是,默认情况下,
xargs
将所有列表作为位置参数传递给我的脚本,例如执行以下操作时:

echo 12 3 | xargs myScript
,它本质上就是
myScript 12 3
,我要找的是
myScript“12 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 -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 $1; shift
echo $1; shift
echo $1;

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


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

如果输入可以更改,您可以这样做。但不确定这是否是你想要的

echo \"1 2 3\"|xargs ./myScript
这是一个例子

$ cat myScript 
#!/bin/bash

echo $1; shift
echo $1; shift
echo $1;

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


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