2016-10-19 6 views
3

Я хочу использовать aruments из xargs как индекс массива, это скрипты:Как использовать аргументы из `xargs` как индекс массива

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]} 

и это выход:

[[email protected] 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, у него такая же проблема.

+1

Это не может работать так, как вы хотите, потому что массив существует только в оболочке, а 'xargs' работает, создавая дочерние процессы. Материал '$ {...}' в командной строке xargs расширяется только один раз, прежде чем выполняется xargs. Вам нужно либо сделать массив доступным для дочерних процессов, либо переписать xargs как цикл оболочки. –

+0

@ WumpusQ.Wumbley ОК, однако, я хочу использовать 'xargs' для параллельной работы, поэтому цикл оболочки не может быть правильным решением :( –

+0

Вы можете попытаться поместить массив в список в окружение и использовать его в команде, начинающейся с 'xargs', но могут быть угловые случаи ... –

ответ

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

Да, это далеко не во избежание этой проблемы. Однако ваши скрипты нужно немного исправить:' for i in \ 'seq 0 \ 'expr $ {# array [@]} - 1 \' \ '' –

0

С GNU Параллельно вы можете сделать:

#!/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

 Смежные вопросы

  • Нет связанных вопросов^_^