【问题标题】:how to group all arguments as position argument for `xargs`如何将所有参数分组为`xargs`的位置参数
【发布时间】:2020-03-18 21:55:45
【问题描述】:
我有一个脚本,它只接受一个位置参数,它是一个值列表,我正在尝试使用 xargs 从标准输入获取参数。
但是,默认情况下,xargs 将所有列表作为位置参数传递给我的脚本,例如做的时候:
echo 1 2 3 | xargs myScript,本质上是myScript 1 2 3,而我正在寻找的是myScript "1 2 3"。实现这一目标的最佳方法是什么?
【问题讨论】:
标签:
shell
command-line
xargs
【解决方案1】:
更改分隔符。
$ 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
【解决方案2】:
如果输入可以更改,您可以这样做。但不确定这是否是您想要的。
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