【发布时间】:2013-08-14 03:34:47
【问题描述】:
一个简单的问题
我有一些数组:
array_0=(1 2 3)
array_1=(1 2 3)
.......
我有一个变量a:
a=0
echo ${array_"$a"[0]}
有一个错误的替换错误。有人知道正确的语法吗?
【问题讨论】:
一个简单的问题
我有一些数组:
array_0=(1 2 3)
array_1=(1 2 3)
.......
我有一个变量a:
a=0
echo ${array_"$a"[0]}
有一个错误的替换错误。有人知道正确的语法吗?
【问题讨论】:
您可以做的一件事是使用以下语法:
array_a=array_$a[0]
echo ${!array_a}
! 作为第一个字符表示您希望通过计算变量然后将结果用作表达式来使用额外的间接级别。
【讨论】:
你可以使用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}
【讨论】:
$() 包围eval(带有echo 的那个),并将其分配给一个变量。使用 Vaughn 的解决方案,您只需将 ${!array_a} 分配给一个变量。
您可以使用eval
echo $(eval echo \${array_$a[0]})
请注意,我必须在第一个美元符号前加一个反斜杠,以防止 shell 插入它。
不用说,数组的全部目的是允许您执行这种类型的变量插值,而无需像我需要数组时那样大惊小怪地回显 eval原始的 Bourne shell。
【讨论】: