Bash 如何通过;“一”;论证并在“中使用两次”;xargs";命令

Bash 如何通过;“一”;论证并在“中使用两次”;xargs";命令,bash,shell,echo,popen,xargs,Bash,Shell,Echo,Popen,Xargs,我试图使用xargs将参数传递给echo: [usr@linux scripts]$ echo {0..4} | xargs -n 1 echo 0 1 2 3 4 -n1确保xargs向echo传递1参数一次 然后我想使用这个aruments两次,但是结果不是我想要的: [usr@linux scripts]$ echo {0..4} | xargs -I@ -n 1 echo @,@ 0 1 2 3 4,0 1 2 3 4 0,0 1,1 2,2 3,3 4,4 当我添加-I@时,-n

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

[usr@linux scripts]$ echo {0..4} | xargs -n 1 echo
0
1
2
3
4
-n1
确保
xargs
echo
传递
1
参数一次

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

[usr@linux scripts]$ echo {0..4} | xargs -I@ -n 1 echo @,@
0 1 2 3 4,0 1 2 3 4
0,0
1,1
2,2
3,3
4,4
当我添加
-I@
时,
-n1
似乎已禁用, 这就是我想要的结果:

[usr@linux scripts]$ echo {0..4} | xargs -I@ -n 1 echo @,@
0 1 2 3 4,0 1 2 3 4
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,0
1,1,1
您可以看到数组
a
没有返回我想要的值:<
如何解决此问题?

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

$ echo -n {0..4} | xargs -d " " -I@ echo @,@
0,0
1,1
2,2
3,3
4,4
否则,请更改输入以使用换行符分隔标记:

$ printf "%s\n" {0..4} | xargs -I@ echo @,@
0,0
1,1
2,2
3,3
4,4
此语法的原因在
manxargs

-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.

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

echo-n{0..4}| xargs-I@-d''echo@
printf“%s\n”{0..4}|xargs-I@echo@
?你能看看我刚刚更新的这个问题吗?使用参数时仍然存在一些问题:(@123Shell扩展发生在xargs看到它之前,因此它总是被计算为
${a[num]}
aka
${a[0]}
。可以做一些愚蠢的事情,比如
xargs-I num-d”“bash-c'echo$num'${a[@]}”
但是可能有更好的方法来实现你的最终目标。@123我只是对
bash-c'echo$num'${a[@]}
有一些疑问,第一个
echo$num
如何工作呢?似乎是
${a[@}中的
$num
@
取代了
?我刚刚尝试了这样的命令
a[0]=x;a[1]=y;num=1;bash-c'echo$num'{a[@]}”
,我期望的输出是y,但是输出是空的。@123:我不完全确定OP的版本为什么不起作用。显然,
xargs
在未使用
-I
选项的情况下在空白处拆分输入行,但使用
-I
时,它将行作为一个参数处理。我在t中找不到很好的解释手册页…在
-I
下,不带引号的空格不终止输入项;相反,分隔符是换行符。
您能看看我刚刚更新的问题吗?在使用参数时仍然存在一些问题:(@springcc:re编辑,它不起作用的原因是变量在执行xargs之前被替换,所以
${a[num]}
获取数组的第一个值,因为
var
未定义。您可以使用eval解决它,但可能有更好的解决方案…@springcc您遇到了一个众所周知的问题。您不能使用
xagrs-I
替换作为数组迭代器。因此您需要通过
eval
调用一些子shell,或者只使用
bash-c
。所以您需要导出数组,但是…您不能从手册页导出bash:)中的数组:
数组变量可能还没有导出。
事实上,有一些黑客可以做到这一点,但更好的方法是调整脚本的逻辑,只给xargs提供常用变量。