xargs能分开参数吗?

jca*_*314 9 linux shell xargs

echo "'param 1' 'param 2'" | xargs -n2 -I@ echo [@] [@]
Run Code Online (Sandbox Code Playgroud)

该命令输出:

[param 1 param 2] [param 1 param 2]

但是,我想输出:

[param 1] [param 2]

有没有办法做到这一点xargs?我计划使用它,-L1因此解决方案将处理多行和多个参数.

Sar*_*kom 8

对于那些从搜索中发现这一点的人来说,接受的答案对我不起作用.

echo "'param 1' 'param 2'" | xargs -n1 | xargs -I@ echo \[@\] \[@\]
Run Code Online (Sandbox Code Playgroud)

生产:

[param 1] [param 1]
[param 2] [param 2]
Run Code Online (Sandbox Code Playgroud)

它不符合原始海报的要求,要求xargs在多个实体中读取,将它们分开,并将它们作为单独的参数发送到单个命令(OP中的"echo").Xargs不是为这类任务而设计的!


bash的答案可以奏效.

p=(`echo "param1 param2"`); echo [${p[0]}] [${p[1]}]
Run Code Online (Sandbox Code Playgroud)

生产:

[param1] [param2]
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案不适用于多行.


使用bash将对线作为参数发送到单个命令的正确解决方案是:

(echo 'param 1'; echo 'param 2'; echo 'param 3'; echo 'param 4') | while read line1; read line2; do echo "[$line1] [$line2]"; done
Run Code Online (Sandbox Code Playgroud)

生产:

[param 1] [param 2]
[param 3] [param 4]
Run Code Online (Sandbox Code Playgroud)


GNU Parallel答案确实有效,但必须制作和安装GNU Parallel.(与Ubuntu一起打包的版本不是GNU Parallel.)