5

只是一个简单的问题

我有一些数组:

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

我有一个变量a:

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

有一个糟糕的替换错误。有谁知道正确的语法?

4

3 回答 3

5

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

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

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

于 2013-08-14T03:57:16.063 回答
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语句本身更易于理解。您将双循环的内部部分替换为for这两行:

    array_a=array_$a[$i]
    echo ${!array_a}
于 2013-08-14T03:48:49.420 回答
1

您可以使用eval

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

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

不用说,数组的全部目的是允许您执行这种类型的变量插值,而无需像我在使用原始 Bourne shell 需要数组时必须做的那样大惊小怪地回显 eval。

于 2013-08-14T03:53:15.333 回答