4

见字如晤。

开发工作中经常见到终端中各种命令输出的彩色文字,例如 ls 命令就以不同颜色表示文件的不同类型。

图片描述

而在我们自己写的程序输出的信息却是默认的黑色,本文将为你介绍终端输出带颜色的文字的原理,让我们开发的程序输出的控制台信息有更强的可读性!

ANSI Escape code

终端用于文本字符的输入和输出,ASCII编码中有些字符是不能用来打印显示的,比如'\a' 0x7代表响铃,'\n' 0x0A 代表换行,这些字符被称为控制符。

今天我们认识一个新的控制符 '\e' 0x1B,这个字符代表 ESC ,即键盘上 ESC 按键的作用。ESC 是单词 escape 的缩写,即逃逸的意思。文本中出现这个转义字符,代表其后方的字符是ANSI Escape code编码。

ANSI Escape code编码中有专门控制字符颜色的控制符,例如:\e[37;44;4;1m

  • \e 代表开始ANSI Escape code
  • [ 代表转义序列开始符 CSI,Control Sequence Introducer
  • 37;44;4;1 代表以; 分隔的文本样式控制符,其中 37 代表文本前景色为白色,44代表背景为蓝色,4代表下划线,1代表加粗
  • m 代表结束控制符序列

运行命令:

echo -e "\e[37;44;4;1mMCC\e[0m"

将显示蓝色背景,白色文字,加粗带下划线的 MCC。-e 参数用于启用 echo 命令控制符转码,结尾的 \e[0m 代表重置文本样式:

  • \e 代表开始ANSI Escape code
  • [ 代表转义序列开始符 CSI,Control Sequence Introducer
  • 0 代表重置文本样式
  • m 代表结束控制符序列

因为 \e 控制符的16进制码为 0x1B , 8 进制码为 033 ,所以以下表示方式等价:

  • \e[37;44;4;1mMCC\e[0m
  • \x1b[37;44;4;1mMCC\x1b[0m
  • \x1B[37;44;4;1mMCC\x1B[0m
  • \033[37;44;4;1mMCC\033[0m

常用文本样式控制符

编码 说明
0 重置、清除样式
1 加粗
3 斜体
4 下划线
5 闪烁
8 隐藏
30~37 前景色,参考下文 《1 位颜色编码》
38 设置前景色,后跟 5;n代表使用8位256颜色码,后跟 2;r;g;b代表24位RGB颜色码
40~47 背景色《1 位颜色编码》
48 设置背景色,后跟 5;n代表使用8位256颜色码,后跟 2;r;g;b代表24位RGB颜色码
90~97 亮色前景色,参考下文 《1 位颜色编码》
100~107 亮色背景,参考下文 《1 位颜色编码》

1 位颜色编码

颜色 前景色编码 背景色编码
黑色 30 40
红色 31 41
绿色 32 42
黄色 33 43
蓝色 34 44
品红色 35 45
青色 36 46
白色 (灰) 37 47
亮黑色 (灰) 90 100
亮红色 91 101
亮绿色 92 102
亮黄色 93 103
亮蓝色 94 104
亮品红色 95 105
亮青色 96 106
亮白色 97 107

8位 256颜色码

图片描述

示例

\e[31m 红色

\e[38;5;31m 8位表示的青色

\e[31;5;1;4m 闪烁的红色加粗带下划线字体

参考资料

https://en.wikipedia.org/wiki...


脉冲云_梁兴臣
616 声望194 粉丝

脉冲云CTO,JS全栈开发,DevOps实施,开发体验优化,开发效率提升