如何使用`xargs`中的参数作为数组的索引

时间:2016-10-19 10:39:51

标签: linux bash shell xargs gnu-parallel

我想使用xargs中的aruments作为此数组的索引,这是脚本:

1 #!/bin/bash
2 array[0]=x
3 array[1]=y
4 echo array : ${array[0]}, ${array[1]}
5 echo -n {0..1} | xargs -I index -d" " echo index,${array[index]}

这是输出:

[usr@linux scripts]$ sh test.sh 
array : x, y
0,x
1,x 

你可以看到数组不能正确接受索引,它始终是第一个。我怎样才能得到这种输出:

array : x, y
0,x
1,y

我用命令echo展示了这个例子,但是,我真正的目标是另一个命令,如下:

echo -n {0..1} | xargs -I index -d" " somecommand ${array[index]}

所以我想要一个解决这个问题的一般方法 我也尝试了parallel而不是xargs,它有同样的问题。

2 个答案:

答案 0 :(得分:1)

for i in `seq 0 $[${#array[@]}-1]`;do echo $i,${array[$i]};done|xargs -n1 echo

答案 1 :(得分:0)

使用GNU Parallel,您可以:

#!/bin/bash

. `which env_parallel.bash`

array[0]=x
array[1]=y
echo array : ${array[0]}, ${array[1]}
echo -n {0..1} | env_parallel -d" " echo '{},${array[{}]}'
# or
echo -n {0..1} | env_parallel --env array -d" " echo '{},${array[{}]}'

你的问题归结为导出数组,你不能不作弊:Exporting an array in bash script