我有以下bash脚本
@Value("classpath:/test.xsl")
private Resource xsl;
.transform(Transformers.xslt(this.xsl))
我希望当我遍历数组时,它将打印牛,山羊乌鸦而不是alpha,beta和gama。 我怎样才能评估这个像$($ i)这样的东西,其中$ i在评估为alpha时,它将其视为$ alpha并对其进行评估。
答案 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