Shell脚本问题:如何通过变量bar获取foo的值?
解决Shell间接变量引用的嵌套扩展问题
你的错误是因为Shell不支持参数扩展的直接嵌套,${${!bar}^^}这种写法不符合Shell语法规则,所以报"bad substitution"错误。下面给你两种可行的解决方法:
方法一:分步处理(可读性更高)
先把间接引用的结果存到临时变量,再依次处理大写转换和二次间接引用:
foo=username bar=foo USERNAME="expected val" # 这里是你要输出的目标变量 # 第一步:通过bar获取foo的值 temp_var=${!bar} # 第二步:把值转成大写 temp_upper=${temp_var^^} # 第三步:间接引用大写后的变量名 echo "${!temp_upper}"
方法二:用eval一次性处理(更简洁)
利用eval来解析嵌套的变量引用逻辑,注意正确转义$符号:
foo=username bar=foo USERNAME="expected val" # 直接通过eval完成所有逻辑 eval echo "\$${!bar^^}"
这个eval写法的逻辑拆解:
${!bar}先解析为username${!bar^^}把username转为大写USERNAME\$${!bar^^}拼接后变成\$USERNAME,eval会把它解析为变量引用$USERNAME,最终输出对应的值
内容的提问来源于stack exchange,提问作者Holger
相关产品推荐
相关产品推荐

