Shell中如何根据FRUIT变量值输出对应水果颜色变量的值?
问题
已知变量FRUIT的值仅可为"APPLE"或"BANANA",且已定义以下变量:
APPLE_COLOR=red BANANA_COLOR=yellow
想要在Shell中根据FRUIT的取值输出对应的颜色("red"或"yellow"),尝试执行echo "${"${FRUIT}_COLOR"}"时出现错误:-bash: "${"${FRUIT}_COLOR"}": bad substitution,请问该如何实现需求?
解决方法
bash不支持这种嵌套的变量展开语法,以下是几种可行的实现方式:
方法一:使用bash间接引用(推荐,简洁安全)
先拼接出目标变量名,再通过${!var}语法实现间接引用:
# 分步写法 COLOR_VAR="${FRUIT}_COLOR" echo "${!COLOR_VAR}" # 一行简化写法 echo "${!${FRUIT}_COLOR}"
方法二:使用eval命令(需谨慎)
通过eval解析拼接后的变量名,注意如果FRUIT的值不可控,可能存在命令注入风险:
eval echo "\${${FRUIT}_COLOR}"
方法三:使用case语句(最安全,适配所有场景)
明确匹配FRUIT的合法取值,同时可处理异常情况:
case "$FRUIT" in APPLE) echo "$APPLE_COLOR" ;; BANANA) echo "$BANANA_COLOR" ;; *) echo "未知水果类型" ;; esac
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

