Ksh

Unix 環境變數名中的變數替換

  • May 3, 2019

我設置了以下 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 的內容,而不是給出實際的分支名稱。

你想要的是變數間接使用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

請使用小寫或大寫變數。導出的變數應為大寫,局部變數應為小寫。

引用自:https://unix.stackexchange.com/questions/516916