如何在 bash 中基于另一个变量引用一个变量?让我设置一下示例:
package="foobar"
# the variable I wish to reference is $foobar_darwin_amd64
# thus trying:
echo "$package_darwin_amd64"
但这是行不通的。
答案1
如果您的 shell 支持${!varname}
间接引用的形式,您可以执行以下操作(按照@Barmar 的建议):
$ foobar_darwin_amd64=pinto
$ package=foobar
$ varname="${package}_darwin_amd64"
$ echo ${!varname}
pinto
否则,您可以使用eval
:
$ foobar_darwin_amd64=pinto
$ package=foobar
$ eval echo \$${package}_darwin_amd64
pinto
也就是说,使用eval
有一些与之相关的风险,看到这个链接进行更多讨论。
答案2
这是对我有用的解决方案:
VARNAME="${package}_darwin_amd64"
echo "${!VARNAME}"
答案3
在 bash v4 中,您可以使用“名称引用”
$ foobar_darwin_amd64=pinto
$ package=foobar
$ declare -n var=${package}_darwin_amd64
$ echo "$var"
pinto
变量姓名您构建的可以通过以下方式获得间接变量扩展语法:
$ echo "${!var}"
foobar_darwin_amd64