我试图使用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 举报,一经查实,本站将立刻删除。