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

如何在Shell脚本中将字符串作为变量名调用其对应取值

你要实现的是Shell中的间接变量引用,有以下几种常用方案:

  • 方案1:Bash 2.0+ 支持的间接扩展(最推荐)
    直接使用${!变量名容器}语法即可完成间接取值,你的测试场景可以改写为:
$ hello=sup
$ hi=hello
$ echo "${!hi}"
sup

如果变量名存储在数组中,遍历数组时用同样的语法取值即可:

# 示例:变量名存储在数组中批量取值
$ hello=sup
$ foo=bar
$ var_arr=("hello" "foo")
$ for name in "${var_arr[@]}"; do echo "${!name}"; done
sup
bar
  • 方案2:Bash 4.3+ 支持的nameref(名称引用)
    可以声明一个引用变量绑定到目标变量名,后续直接操作引用变量就等于操作目标变量:
$ hello=sup
$ hi=hello
$ declare -n ref="$hi"
$ echo "$ref"
sup
$ ref=hi
$ echo "$hello"
hi
  • 方案3:POSIX 兼容写法(适配所有标准Shell,注意安全风险)
    如果需要兼容非Bash的POSIX Shell,可以用eval实现,但注意仅在变量名完全可控的场景下使用,避免代码注入风险:
$ hello=sup
$ hi=hello
$ eval "echo \$$hi"
sup

你之前的写法echo $echo $hi`` 执行时,Shell先完成命令替换得到hello,拼接后得到的$hello不会触发二次变量解析,只会作为普通字符串输出,因此得不到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:48:03