微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐