쉘 변수 이름을 동적으로 찾는 방법

쉘 변수 이름을 동적으로 찾는 방법

나는 다음과 같은 상황에 처해 있습니다.

zmx_stderr='\033[1;35m'
zmx_stdout='\033[1;36m'


tag='foobar'

tailing(){
  echo "tailing logs for ${tag} ...";
  while read line; do
   echo -e "$zmx_${1} $tag $1${zmx_no_color}: $line"
  done;
}

누군가 tailing() 메서드를 호출합니다.

tailing stderr
tailing stdout

zmx_stdout 및 zmx_stderr을 동적으로 찾는 방법은 무엇입니까?

이것은 작동하지 않습니다:

$zmx_${1}

나는 방금 이것을 알아냈습니다:

stdout foobar stdout:

하지만 내가 찾고 있는 것은:

foobar stdout:

제어 문자 생성.


답변1

보조 변수를 사용하여 대상 변수의 이름을 만든 다음 변수 간접 참조를 사용할 수 있습니다.

zmx_var=zmx_$1
echo -e "${!zmx_var} $tag $1${zmx_no_color}: $line"

답변2

Bash 버전 4.4(제 생각에는) 이상에서는 "nameref"를 사용할 수 있습니다.

$ foo_bar=hello
$ set -- bar
$ declare -n "var=foo_$1"
$ echo "$var"
hello

관련 정보