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
因此解决方案将处理多行和多个参数.
对于那些从搜索中发现这一点的人来说,接受的答案对我不起作用.
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.)
归档时间: |
|
查看次数: |
8090 次 |
最近记录: |