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

时间:2018-06-08 14:07:21

标签: 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
LESS_TERMCAP_mb=
LESS_TERMCAP_md=
LESS_TERMCAP_me=

截图:

env colors

如何逃避这些字符串,以便将其视为字符串文字?理想情况下类似于env | escape_color_codes_somehow

1 个答案:

答案 0 :(得分:2)

你可以这样做:

[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 manual

  

<强> ${parameter}

     
    

如果parameter的第一个字符是感叹号(!),而parameter不是 nameref ,则会引入变量间接。 Bash使用从parameter的其余部分形成的变量的值作为变量的名称;然后展开此变量,并将该值用于替换的其余部分,而不是parameter本身的值。这称为间接扩展。如果parameter nameref ,则会扩展为parameter引用的变量的名称,而不是执行完整的间接扩展。例外情况是下文所述${!prefix*}${!name[@]}的扩展。

  
     

<强> ${!prefix*}
  的 ${!prefix@}

     
    

匹配prefix的名称。扩展为名称以prefix开头的变量的名称,由IFS特殊变量的第一个字符分隔。当使用@并且扩展名出现在双引号内时,每个变量名称都会扩展为单独的单词。