【问题标题】:How to do double indirect expansion in bash?如何在bash中进行双重间接扩展?
【发布时间】:2020-04-09 20:12:19
【问题描述】:

我正在尝试将颜色名称作为参数传递以更改该打印的字体颜色。我还想根据传递的颜色打印信息类型,如 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 "\033[1;${!{!1}}m${!1} $3\033[0m\n"
}

并使用

调用
Print red "text"

预期输出

[ ERR] text <------IN RED

实际输出

*\033[1;${!{!1}}m${!1} $3\033[0m\n: bad substitution*

【问题讨论】:

    标签: linux bash shell command


    【解决方案1】:

    如何在bash中进行双重间接扩展?

    它不能直接完成。但也可以间接完成,就是多一行:

    Print() {
        msg=${!1}
        printf "\033[1;${!msg}m[${msg}] $2\033[0m\n"
    }
    

    注意$3错了,应该是$2

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2021-02-20
      相关资源
      最近更新 更多