如何在bash中进行双重间接扩展?
How to do double indirect expansion in bash?
我正在尝试将颜色名称作为参数传递,以更改该打印件的字体颜色。我还想根据传递的颜色打印消息类型,如 INFO、ERR、SUCC、CMD 等。
函数是
red=ERR
grn=SUCC
yel=WARN
blu=INFO
mag=STAT
cyn=CMD
ERR=31
SUCC=32
WARN=33
INFO=34
STAT=35
CMD=36
end=$'\e[0m'
Print() {
printf "3[1;${!{!1}}m${!1} 3[0m\n"
}
并使用
调用
Print red "text"
预期输出
[ ERR] text <------IN RED
实际输出
*3[1;${!{!1}}m${!1} 3[0m\n: bad substitution*
How to do double indirect expansion in bash?
不能直接完成。但是可以间接完成,就是多了一行:
Print() {
msg=${!1}
printf "3[1;${!msg}m[${msg}] 3[0m\n"
}
注意</code>错了,应该是<code>
.
我正在尝试将颜色名称作为参数传递,以更改该打印件的字体颜色。我还想根据传递的颜色打印消息类型,如 INFO、ERR、SUCC、CMD 等。
函数是
red=ERR
grn=SUCC
yel=WARN
blu=INFO
mag=STAT
cyn=CMD
ERR=31
SUCC=32
WARN=33
INFO=34
STAT=35
CMD=36
end=$'\e[0m'
Print() {
printf "3[1;${!{!1}}m${!1} 3[0m\n"
}
并使用
调用Print red "text"
预期输出
[ ERR] text <------IN RED
实际输出
*3[1;${!{!1}}m${!1} 3[0m\n: bad substitution*
How to do double indirect expansion in bash?
不能直接完成。但是可以间接完成,就是多了一行:
Print() {
msg=${!1}
printf "3[1;${!msg}m[${msg}] 3[0m\n"
}
注意</code>错了,应该是<code>
.