1

我想就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

输出应该是这样的

目录 1:1
目录 1:2
目录 1:3
目录2:一个
目录2:乙
目录2:c
目录 3:9
目录 3:8
目录 3:7
4

2 回答 2

7

这可以使用 bash 的间接变量特性来完成。

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

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

于 2013-05-02T05:58:48.517 回答
0

最后,我找到了解决方案。我不得不使用 eval 因为我无法处理其他语法,我的意思是 the${!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
于 2013-05-05T12:42:21.923 回答