考虑以下无意义数组:
# KIND[ID]=NAME
MONKEYS[1]="Oo Oo"
MONKEYS[2]="Aa Aa"
MONKEYS[3]="Ba Nana"
LIONS[5]="Mister Mufasa"
LIONS[7]="Cocoa Puff"
LIONS[8]="Lala Leo"
TIGERS[13]="Ben Gal"
TIGERS[15]="Tee Eye Double Guh Err"
TIGERS[22]="Oh Esex Diez Punto Cuatro"
使用给定的KIND
and ID
,我正在尝试构建一个类似于$NAME[$ID]
获取关联名称的字符串。
当显式声明数组名称时,该命令的行为与预期相同echo "${LIONS[5]}"=>"Mister Mufasa"
)。但是,每当使用变量时,shell 都会以字符串中的给定字符进行响应。
$LIONS[5] => 'e' # The fifth letter in "Mister Mufasa"
在其他情况下,我找不到控制插值以获得NAME
KIND="LIONS"
ID="5"
# Attempt to return value of `LIONS` when `KIND=LIONS`
echo $"${KIND}"; echo "\$${KIND}" #=> "$LIONS"
echo "$${KIND}" #=> "57800{KIND}" Interpolates "$$"
echo "\$\${KIND}"; "\$\${KIND}" #=> "$${KIND}"
我发现以下作品虽然“丑陋”...
eval echo `echo \\$${KIND}`
然而,当介绍ID
事情再次中断时:
eval echo `echo \\$${KIND}[$ID]`
#> title:5: no matches found: $LIONS[5]
#> no matches found: $LIONS[5]
我觉得我错过了一些非常简单的东西。我有一种预感,我忘了逃避什么,但我不太确定是什么。
此外,还有哪些“较少冗余”的替代方案eval echo `echo...
或eval echo `print...
存在?