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