在bash中,如何使用变量作为另一个变量名称的一部分?

时间:2013-08-14 03:34:48

标签: bash variables

只是一个简单的问题

我有一些数组:

array_0=(1 2 3) 
array_1=(1 2 3) 
.......

我有一个变量a:

 a=0
 echo ${array_"$a"[0]}

替换错误。有谁知道正确的语法?

3 个答案:

答案 0 :(得分:5)

您可以做的一件事是使用以下语法:

array_a=array_$a[0]
echo ${!array_a}

作为第一个字符的!表示您希望通过评估变量然后使用结果作为表达式来使用额外的间接级别。

答案 1 :(得分:1)

您可以使用eval

#!/bin/bash
array_0=(1 2 3)
array_1=(4 5 6)
array_2=(7 8 9)
for a in {0..2} ; do
  for i in {0..2} ; do
    eval 'echo ${'"array_$a[$i]"'}'
  done
done

Vaughn Cato的语法略显冗长,但echo语句本身更难以辨认。用这两行替换double for循环的内部部分:

    array_a=array_$a[$i]
    echo ${!array_a}

答案 2 :(得分:1)

您可以使用eval

echo $(eval echo \${array_$a[0]})

请注意,我必须在第一个美元符号前面加一个反斜杠,以防止shell插入它。

毋庸置疑,数组的整个目的是允许你进行这种类型的变量插值,而不需要像我在需要数组时所做的那样大惊小怪的回应。原来的Bourne shell。