见字如晤。
开发工作中经常见到终端中各种命令输出的彩色文字,例如 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
闪烁的红色加粗带下划线字体