Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用'xargs'中的参数作为数组的索引_Linux_Bash_Shell_Xargs_Gnu Parallel - Fatal编程技术网

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

Linux 如何使用'xargs'中的参数作为数组的索引,linux,bash,shell,xargs,gnu-parallel,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]} for i in `seq 0 $[${#array[@]}-1]`;do echo $i,${array[$i]};done|xar

我想使用
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]}
for i in `seq 0 $[${#array[@]}-1]`;do echo $i,${array[$i]};done|xargs -n1 echo
这是输出:

[usr@linux scripts]$ sh test.sh 
array : x, y
0,x
1,x 
for i in `seq 0 $[${#array[@]}-1]`;do echo $i,${array[$i]};done|xargs -n1 echo
您可以看到数组不能正确地接受索引,它总是第一个。如何获得这种输出:

array : x, y
0,x
1,y
for i in `seq 0 $[${#array[@]}-1]`;do echo $i,${array[$i]};done|xargs -n1 echo
我用命令
echo
展示了这个示例,但是,我真正的目标是另一个命令,如下所示:

echo -n {0..1} | xargs -I index -d" " somecommand ${array[index]}
for i in `seq 0 $[${#array[@]}-1]`;do echo $i,${array[$i]};done|xargs -n1 echo
所以我想要一个这个问题的一般解决方案。

我还尝试了
并行
而不是
xargs
,它也有同样的问题

使用GNU Parallel,您可以执行以下操作:

for i in `seq 0 $[${#array[@]}-1]`;do echo $i,${array[$i]};done|xargs -n1 echo
#!/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[{}]}'

您的问题最终归结为导出数组,如果不进行欺骗,您将无法做到这一点:

这可能无法按您希望的方式工作,因为数组只存在于shell中,
xargs
通过创建子进程来工作。xargs命令行中的
${…}
内容在执行xargs之前只展开一次。您必须使数组对子进程可用,或者将xargs重写为shell循环。@WumpusQ.Wumbley好的,但是,我想使用
xargs
进行并行处理,因此shell循环不是合适的解决方案:(您可以尝试将数组作为列表放在环境中,并在以
xargs
开始的命令中使用该列表,但可能会出现一些特殊情况……是的,这是避免此类问题的一个好办法。但是,您的脚本应该得到一些更正:`seq 0`expr${array[@]}-1`
for i in `seq 0 $[${#array[@]}-1]`;do echo $i,${array[$i]};done|xargs -n1 echo