我在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
...我不确定是否可能,请建议
答案 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