BASH中的变量变量

时间:2013-05-02 05:32:56

标签: bash variables

我想在bash中询问有关变量变量的一些帮助。我已经阅读了一些关于它的文章,但就我而言,我不知道该怎么做。让我们看看我的问题:

该数组包含其他数组的名称,我想打印这些数组的值。在内心,我需要变量变量。

#!/bin/bash
declare -a array=(dir1 dir2 dir3)
declare -a dir1=(1 2 3)
declare -a dir2=(a b c)
declare -a dir3=(9 8 7)

for elem1 in "${array[@]}"
do
  for elem2 in "${variableVariable[@]}"
  do
    echo "$elem1 : $elem2"
  done
done

输出应该是这样的

dir1 : 1
dir1 : 2
dir1 : 3
dir2 : a
dir2 : b
dir2 : c
dir3 : 9
dir3 : 8
dir3 : 7

2 个答案:

答案 0 :(得分:7)

这可以使用bash的间接变量功能完成。

for elem1 in "${array[@]}"
do
  elems=$elem1'[@]'
  for elem2 in "${!elems}"
  do
    echo "$elem1 : $elem2"
  done
done

请注意,这是一个bash扩展,它不能移植到其他shell。

答案 1 :(得分:0)

最后,我找到了解决方案。我不得不使用eval,因为我无法处理其他语法,我的意思是${!variable}${variable[@]}的组成。

#!/bin/bash
declare -a array=(dir1 dir2 dir3)
declare -a dir1=(1 2 3)
declare -a dir2=(a b c)
declare -a dir3=(9 8 7)

for elem1 in "${array[@]}"
do
  for elem2 in `eval echo \$\{$elem1\[@\]\}"`
  do
    echo "$elem1 : $elem2"
  done
done