Bash Shell脚本动态变量名取值报错如何解决?
${${VEHICLE_TYPE}_PRICE}属于嵌套变量替换语法,Bash原生不支持该写法,因此会抛出Bad Substitution错误,你可以选择以下三种常用方案实现动态取值:
方案1:间接变量扩展(兼容性最好,Bash 2.0及以上版本均支持)
先拼接得到完整的目标变量名,再通过!前缀做间接取值:
# 拼接目标变量名 TARGET_VAR="${VEHICLE_TYPE}_PRICE" # 间接取值 PRICE=${!TARGET_VAR}
方案2:eval实现(仅推荐变量内容可控的场景使用)
注意:如果VEHICLE_TYPE的值来自不可信输入,eval存在命令注入风险,谨慎使用:
PRICE=$(eval echo \$${VEHICLE_TYPE}_PRICE)
方案3:关联数组实现(优先推荐,可读性最高)
如果你的运行环境支持Bash 4.0及以上版本,使用关联数组存储映射关系比动态变量名更易维护,也避免了各类取值语法坑:
# 声明关联数组并初始化 declare -A PRICE_MAP PRICE_MAP=( [CAR]=50000 [BIKE]=20000 ) # 直接用变量作为key取值 PRICE=${PRICE_MAP[${VEHICLE_TYPE}]}
内容的提问来源于stack exchange,提问作者finepax007
相关产品推荐
相关产品推荐

