繁体   English   中英

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

[英]Multi layer variable substitution in shell.. possible?

我在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

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

通过臭名昭著的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM