Я хочу использовать 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
, у него такая же проблема.
Это не может работать так, как вы хотите, потому что массив существует только в оболочке, а 'xargs' работает, создавая дочерние процессы. Материал '$ {...}' в командной строке xargs расширяется только один раз, прежде чем выполняется xargs. Вам нужно либо сделать массив доступным для дочерних процессов, либо переписать xargs как цикл оболочки. –
@ WumpusQ.Wumbley ОК, однако, я хочу использовать 'xargs' для параллельной работы, поэтому цикл оболочки не может быть правильным решением :( –
Вы можете попытаться поместить массив в список в окружение и использовать его в команде, начинающейся с 'xargs', но могут быть угловые случаи ... –