我想在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
答案 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