从变量引用 bash 变量

从变量引用 bash 变量

如何在 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

相关内容