You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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写法的逻辑拆解:

  1. ${!bar} 先解析为username
  2. ${!bar^^} 把username转为大写USERNAME
  3. \$${!bar^^} 拼接后变成\$USERNAME,eval会把它解析为变量引用$USERNAME,最终输出对应的值

内容的提问来源于stack exchange,提问作者Holger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:41:13