我有这样的情况:
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