首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Bash中转义颜色代码?

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

Stack Overflow用户
提问于 2018-06-08 22:07:21
回答 1查看 133关注 0票数 2

我的~/.bashrc里有一些颜色代码

代码语言:javascript
复制
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仍然解释颜色代码:

代码语言:javascript
复制
$ env | grep LESS
LESS_TERMCAP_mb=
LESS_TERMCAP_md=
LESS_TERMCAP_me=

截图:

如何对这些字符串进行转义,以便可以将它们视为字符串文字?理想的情况是像env | escape_color_codes_somehow这样的东西。

EN

回答 1

Stack Overflow用户

发布于 2018-06-08 22:24:01

您可以这样做:

代码语言:javascript
复制
[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,则它引入了一定级别的变量间接parameter使用由parameter的其余部分组成的变量的值作为变量的名称;然后扩展该变量,并在替换的其余部分中使用该值,而不是Bash本身的值。这就是所谓的间接扩展。如果parameter是一个nameref,它将扩展到parameter引用的变量的名称,而不是执行完全的间接扩展。下面描述的${!prefix*}${!name[@]}的扩展是个例外。${!prefix*}

${!prefix@}

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50762472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档