在bash中将变量评估为变量

时间:2016-03-17 14:23:34

标签: bash

我有以下bash脚本

@Value("classpath:/test.xsl")
private Resource xsl;

.transform(Transformers.xslt(this.xsl))

我希望当我遍历数组时,它将打印牛,山羊乌鸦而不是alpha,beta和gama。 我怎样才能评估这个像$($ i)这样的东西,其中$ i在评估为alpha时,它将其视为$ alpha并对其进行评估。

2 个答案:

答案 0 :(得分:5)

您可以使用parameter expansion

echo ${!i}

引自the manual

  

如果参数的第一个字符是感叹号(!),那么   引入了一个变量间接层。 Bash使用的值   由参数的其余部分形成的变量作为名称   变量;然后展开此变量,并在该变量中使用该值   其余的替换,而不是参数本身的值。   这被称为间接扩张。对此的例外是   下面描述的$ {!prefix *}和$ {!name [@]}的扩展。该   感叹号必须紧跟左支撑以便   介绍间接。

答案 1 :(得分:0)

使用关联数组(bash v4.3)

declare -A input=( 
    [alpha]=cow 
    [beta]=goat 
    [gamma]=crow 
)

for key in "${!input[@]}"; do 
    echo "$key -> ${input[$key]}"
done
gamma -> crow
alpha -> cow
beta -> goat

关联数组不维护键的顺序。如果这很重要,您可以保留一个单独的键列表:

declare -a keys=( alpha beta gamma )
for key in "${keys[@]}"; do echo "$key -> ${input[$key]}"; done
alpha -> cow
beta -> goat
gamma -> crow