シェル変数名を動的に見つける方法

シェル変数名を動的に見つける方法

私は次のような状況にあります。

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

関連情報