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

请使用小写或大写变量。导出变量应为大写,局部变量应为小写。

相关内容