変数の参照 bash 変数

変数の参照 bash 変数

Bashで他の変数に基づいて変数を参照する方法は?はいを設定します。

package="foobar"

# the variable I wish to reference is $foobar_darwin_amd64
# thus trying:
echo "$package_darwin_amd64"

しかし、これはうまくいきません。

答え1

シェルが${!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

関連情報