bash – 如何传递“one”参数并在“xargs”命令中使用它两次

我试图使用xargs将参数传递给echo:

[usr@linux scripts]$echo {0..4} | xargs -n 1 echo
0
1
2
3
4

-n 1确保xargs一次传递1个参数到回声.

然后我想两次使用这个武器,但结果不是我想要的:

[usr@linux scripts]$echo {0..4} | xargs -I@ -n 1 echo @,@
0 1 2 3 4,0 1 2 3 4

当我添加-I @时,-n 1似乎被禁用了,
这是我想要的结果:

0,0
1,1
2,2
3,3
4,4

我怎么能实现这一目标?

– – – – 供应 – – – – – – – – –
我使用了@ 123推荐的方法,但还有另外一个问题:

test.sh:

#!/bin/bash
a[0]=1
a[1]=2
echo "a[0] and a[1] : "${a[0]},${a[1]}
echo -n {0..1} | xargs -I num -d" " echo num,${a[num]},num

这是输出

[usr@linux scripts]$sh test.sh 
a[0] and a[1] : 1,2
0,1,1

你可以看到数组a没有返回我想要的值:<
我该如何解决这个问题?

解决方法

如果无法更改输入格式,可以将分隔符设置为空格:

$echo -n {0..4} | xargs -d " " -I@ echo @,@
0,4

否则,更改输入以使用换行符分隔标记

$printf "%s\n" {0..4} | xargs -I@ echo @,4

man xargs解释了这种语法的原因

-I replace-str

Replace occurrences of replace-str in the  initial-arguments  with  names  read  from
standard input.  Also,unquoted blanks do not terminate input items; instead the sep‐
arator is the newline character.  Implies -x and -L 1.

因此,如果要分隔字段,则必须手动将分隔符设置为空格.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...