Unix環境変数名の変数置換

Unix環境変数名の変数置換

次のUnix環境変数を設定しました。

export Dev_Branch=temp
export QA_Branch=stage
export Prod_Branch=master

スクリプトへの入力として環境名があり、その分岐名を取得する必要があります。そのため、ユーザーが「Dev」と入力すると「temp」、「QA」と入力すると「stage」、「Prod」と入力すると「master」と表示されます。

私が使用するコードは

br_name=`echo \$"${1}"_Branch`

ただし、br_nameは実際のブランチ名を指定するのではなく、$Dev_Branchのようなものを表示します。

ベストアンサー1

あなたが望むのは可変間接参照ですnameref

$ export QA_Branch=stage
$ what="QA"

# ksh indirection
$ nameref br_name="${what}_Branch"
$ echo "$br_name"
stage

# dash indirection using eval, also works in ksh, bash
$ eval "br_name=\$${what}_Branch"
$ echo "$br_name"
stage

# bash indirection
$ br_name="$what"_Branch
$ echo "${!br_name}"
stage

小文字または大文字の変数を使用してください。エクスポートした変数は大文字で、ローカル変数は小文字で入力する必要があります。

おすすめ記事