我试图在bash中间接引用数组中的值。

anotherArray=("foo" "faa")

foo=("bar" "baz")
faa=("test1" "test2")


for indirect in ${anotherArray[@]}
do

echo ${!indirect[0]}
echo ${!indirect[1]}

done

这不起作用。为了得到$foo的不同值,我尝试了很多不同的方法,通过回显$indirect,但是我只能得到第一个值,所有的值,'0'或者什么都没有。

最佳答案

必须在用于间接寻址的变量中写入索引:

anotherArray=("foo" "faa")
foo=("bar" "baz")
faa=("test1" "test2")

for indirect in ${anotherArray[@]}; do
  all_elems_indirection="${indirect}[@]"
  second_elem_indirection="${indirect}[1]"
  echo ${!all_elems_indirection}
  echo ${!second_elem_indirection}
done

如果要遍历anotherArray中引用的每个数组的每个元素,请执行以下操作:
anotherArray=("foo" "faa")
foo=("bar" "baz")
faa=("test1" "test2")

for arrayName in ${anotherArray[@]}; do
  all_elems_indirection="${arrayName}[@]"
  for element in ${!all_elems_indirection}; do
    echo $element;
  done
done

或者,您可以直接将整个间接指令存储在第一个数组中:anotherArray=("foo[@]" "faa[@]")

关于arrays - bash中对数组值的间接引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40307250/

10-13 07:12