echo "'param 1' 'param 2'" | xargs -n2 -I@ echo [@] [@]
此命令输出:
[参数 1 参数 2] [参数 1 参数 2]
但是,我希望它输出:
[参数 1] [参数 2]
有没有办法做到这一点xargs
?我计划使用它,-L1
以便解决方案可以处理多行以及多个参数。
对于那些通过搜索找到这个的人,接受的答案对我不起作用。
echo "'param 1' 'param 2'" | xargs -n1 | xargs -I@ echo \[@\] \[@\]
产生:
[param 1] [param 1]
[param 2] [param 2]
这不符合原始发布者给出的要求,即在多个实体中读取 xargs,将它们分开,并将它们作为单独的参数发送到单个命令(OP 中的“echo”)。Xargs 不是为此类任务而设计的!
bash 答案可以工作。
p=(`echo "param1 param2"`); echo [${p[0]}] [${p[1]}]
产生:
[param1] [param2]
但是此解决方案不适用于多条线路。
使用 bash 将成对的行作为参数发送到单个命令的正确解决方案是:
(echo 'param 1'; echo 'param 2'; echo 'param 3'; echo 'param 4') | while read line1; read line2; do echo "[$line1] [$line2]"; done
产生:
[param 1] [param 2]
[param 3] [param 4]
GNU Parallel 答案确实有效,但必须制作并安装 GNU Parallel。(Ubuntu 打包的版本不是 GNU Parallel。)
echo "'param 1' 'param 2'" | xargs -n1 | xargs -I@ echo \[@\] \[@\]
(在我的外壳中我需要逃生[]
,你的里程可能会有所不同)。
为什么坚持xargs?bash 可以很好地处理这个问题:
p=(`echo "param1 param2"`); echo ${p[0]} ${p[1]}
使用 GNU Parallel,您可以:
(echo 'param 1'; echo 'param 2') | parallel -N2 echo '\[{1}] \[{2}]'
观看介绍视频以了解更多信息:http ://www.youtube.com/watch?v=OpaiGYxkSuQ
正如这个答案所建议的,给定一个echo
:
参数 1 参数 2
参数 3 参数 4
以下管道:
... | while read line1; read line2; do echo "[$line1] [$line2]"; done
产生:
[param1] [param2]
[param3] [param4]
如果您有一个文件myFile.txt
包含许多行,每行有两个参数,请使用以下基于的策略xargs
,以便将参数重用为$f
and $g
:
cat myFile.txt | xargs -n1 | while read f; read g; do echo $f $g; done