Как сделать двойное косвенное расширение в bash? - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь передать имя цвета в качестве параметра, чтобы изменить цвет шрифта для этого отпечатка. Я также хотел бы напечатать тип сообщения, такой как INFO, ERR, SU CC, CMD и c, в зависимости от переданного цвета.

функция равна

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*

1 Ответ

2 голосов
/ 10 апреля 2020

Как сделать двойное косвенное расширение в bash?

Это нельзя сделать напрямую. Но это может быть сделано косвенно, это всего лишь на одну строку больше:

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

Обратите внимание, что $3 неправильно, это должно быть $2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...