shell中的多层变量替换..可能吗?

时间:2012-02-19 21:59:25

标签: shell

我在shell脚本中有多个变量;我试图保存一些代码重复,并希望做类似以下的事情

# variables
FLAG=SIM
SIM_ICR_KEY_VAL="http://www.example.com/simi/icr"
REAL_ICR_KEY_VAL="http://www.example.com/real"

根据FLAG值,我想访问正确的变量(不使用IF) 当我尝试这个时,它回显变量名称&不是价值本身。

 echo $(echo ${FLAG}_ICR_KEY_VAL)

进一步说明;我需要在sed statememt中内联使用这些替换:

sed "s!${ISTR_KEY}=.*!${ISTR_KEY}=${SIM_ISTR_KEY_VAL}!" > tmp.file

...我不确定是否可能,请建议

2 个答案:

答案 0 :(得分:2)

臭名昭着的eval

可以实现反思
eval thisvar=\$${FLAG}_INC_KEY_VAL;
echo "We are using $thisvar"

但是,每当您发现自己动态合成变量名称时,您可能正在做错了。您应该考虑像数组这样的替代方案:

ICR_KEY_VAL[0]="http://www.example.com/simi/icr"
ICR_KEY_VAL[1]="http://www.example.com/real"

SIM=0

echo ${ICR_KEY_VAL[$SIM]}

答案 1 :(得分:0)

我不知道如何直接这样做,但是在bash中你可以间接地做到这一点:

FLAG=SIM
SIM_ICR_KEY_VAL="http://www.example.com/simi/icr"
REAL_ICR_KEY_VAL="http://www.example.com/real"
FLAG_ICR_KEY_VAL=${FLAG}_ICR_KEY_VAL
sed "s!${ISTR_KEY}=.*!${ISTR_KEY}=${!FLAG_ISTR_KEY_VAL}!" > tmp.file