如何动态查找shell变量名

如何动态查找shell变量名

我有这样的情况:

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

相关内容