Как мне избежать цветовых кодов в Bash? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть несколько цветовых кодов в моем ~/.bashrc:

export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking
export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold
export LESS_TERMCAP_me=$'\E[0m'           # end mode

Это добавляет немного цвета на мои справочные страницы.Однако, когда я использую env, bash все равно интерпретирует цветовые коды:

$ env | grep LESS
LESS_TERMCAP_mb=
LESS_TERMCAP_md=
LESS_TERMCAP_me=

Снимок экрана:

env colors

Как можноЯ избегаю этих строк, чтобы видеть их как строковые литералы?В идеале что-то вроде env | escape_color_codes_somehow.

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете сделать это:

[STEP 101] $ echo ${!LESS_*}
LESS_TERMCAP_mb LESS_TERMCAP_md LESS_TERMCAP_me LESS_TERMCAP_se LESS_TERMCAP_so LESS_TERMCAP_ue LESS_TERMCAP_us
[STEP 102] $ for varname in ${!LESS_*}; do \
                 printf '%s=%q\n' $varname "${!varname}"; \
             done
LESS_TERMCAP_mb=$'\E[01;31m'
LESS_TERMCAP_md=$'\E[01;37m'
LESS_TERMCAP_me=$'\E[0m'
LESS_TERMCAP_se=$'\E[0m'
LESS_TERMCAP_so=$'\E[01;44;33m'
LESS_TERMCAP_ue=$'\E[0m'
LESS_TERMCAP_us=$'\E[00;32m'
[STEP 103] $

С Руководство по bash :

${parameter}

Если первый символ parameter является восклицательным знаком (!), а parameter не является nameref , он вводит уровень переменной косвенности ,Bash использует значение переменной, сформированной из остальной части parameter, в качестве имени переменной;эта переменная затем раскрывается, и это значение используется в остальной части замещения, а не в значении parameter.Это известно как косвенное расширение .Если parameter является nameref , это расширяется до имени переменной, на которую ссылается parameter вместо полного косвенного раскрытия.Исключением являются описанные ниже расширения ${!prefix*} и ${!name[@]}.

${!prefix*}
${!prefix@}

Имена совпадают prefix.Расширяется до имен переменных, имена которых начинаются с prefix, разделенных первым символом специальной переменной IFS.Когда используется @ и расширение отображается в двойных кавычках, имя каждой переменной раскрывается в отдельное слово.

...