shell中的多层变量替换。。可能的

shell中的多层变量替换。。可能的,shell,Shell,我在一个shell脚本中有多个变量;我试图保存一些代码重复,并想做如下事情 # variables FLAG=SIM SIM_ICR_KEY_VAL="http://www.example.com/simi/icr" REAL_ICR_KEY_VAL="http://www.example.com/real" 根据标志值,我希望访问正确的变量(不使用IF) 当我尝试这样做时,它会回显变量名&而不是值本身 echo $(echo ${FLAG}_ICR_KEY_VAL) 进一步说明;我需要在

我在一个shell脚本中有多个变量;我试图保存一些代码重复,并想做如下事情

# variables
FLAG=SIM
SIM_ICR_KEY_VAL="http://www.example.com/simi/icr"
REAL_ICR_KEY_VAL="http://www.example.com/real"
根据标志值,我希望访问正确的变量(不使用IF) 当我尝试这样做时,它会回显变量名&而不是值本身

 echo $(echo ${FLAG}_ICR_KEY_VAL)
进一步说明;我需要在sed状态中内联使用这些替换:

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

。。。我不确定这是否可能,请建议用臭名昭著的
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]}

我不知道如何直接执行,但在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
@希德:很高兴听到这个消息——永远不要放弃相信贝壳的力量!:-)