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

소문자 또는 대문자 변수를 사용하세요. 내보낸 변수는 대문자로, 지역 변수는 소문자로 입력해야 합니다.

관련 정보