Skip to main content

27 为terminal的输出字符添加颜色

1 在terminal中输出颜色的字符格式是什么?

terminal客户端是一个tui的字符解析器。当程序以字符输出时,有些字符会用特定的字符格式标记为该字符在在terminal显示时,要解析成特定的颜色或格式,从而展示到用户面前。 所以terminal的之所以能显示出字符的颜色或其它字符样式,其它原因在于对特定格式的解析,明白了这些格式原理和应用就能知道怎么在终端中输出字符格式了。
字符的颜色格式从: \e[风格代码;字符颜色代码;背景颜色代码m开始到 \e[0m结束.
如输出, 一个粗体绿色字符和蓝色背景的字符,则是:

$ echo -e "\e[0;92;104m Hello world \e[0m"
Hello world

效果如下:

Hello world

2 风格代码和颜色代码

ColorForeground CodeBackground Code
Black3040
Red3141
Green3242
Yellow3343
Blue3444
Magenta3545
Cyan3646
Light Gray3747
Gray90100
Light Red91101
Light Green92102
Light Yellow93103
Light Blue94104
Light Magenta95105
Light Cyan96106
White97107

To change the color of the text, what we want is the foreground code. There are also a few other non-color special codes that are relevant to us:

CodeDescription
0Reset/Normal
1Bold text
2Faint text
3Italics
4Underlined text

3 简短写法

风格代码 、 颜色代码和背景颜色代码各不一样且互不重复,所以在写的时候不用注重格式的顺序,只要代码对了就行。如还是上那个例子: 可这样写:

$ echo -e "\e[0;104;92m Hello world \e[0m" 
$ echo -e "\e[104;0;92m Hello world \e[0m"
$ echo -e "\e[92;104;0m Hello world \e[0m"

都是可以的

4 参考资料

  1. 《Adding colors to Bash scripts 》