如何在Bash中转义颜色代码?

如何在Bash中转义颜色代码?,bash,ansi-colors,Bash,Ansi Colors,我的~/.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 LE

我的
~/.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 | escape_color_codes(以某种方式

您可以这样做:

[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] $
发件人:

${parameter}

如果
参数
的第一个字符是感叹号(
),并且
参数
不是nameref,则会引入一个变量间接级别。Bash使用由
参数
的其余部分组成的变量值作为变量名;然后展开此变量,并在替换的其余部分中使用该值,而不是
参数
本身的值。这就是所谓的间接扩张。如果
参数
是nameref,则会扩展到
参数
引用的变量的名称,而不是执行完整的间接扩展。例外情况是下面描述的
${!prefix*}
${!name[@]}
的扩展

${!前缀*}

${!prefix@}

名称匹配
前缀
。扩展到名称以
前缀开头的变量名称,由
IFS
特殊变量的第一个字符分隔。当使用
@
且展开显示在双引号内时,每个变量名展开为一个单独的单词


在bash中,您将永远无法逃脱颜色代码。它们将永远困扰着你……
cat-e
(取决于你对
cat
的实现)将显示一个可打印的ASCII字符表示,否则就无法打印。