只是一个简单的问题
我有一些数组:
array_0=(1 2 3)
array_1=(1 2 3)
.......
我有一个变量a:
a=0
echo ${array_"$a"[0]}
替换错误。有谁知道正确的语法?
答案 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。