在终端中输出彩色文字

见字如晤。

开发工作中经常见到终端中各种命令输出的彩色文字,例如 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 位颜色编码

颜色前景色编码背景色编码
黑色3040
红色3141
绿色3242
黄色3343
蓝色3444
品红色3545
青色3646
白色 (灰)3747
亮黑色 (灰)90100
亮红色91101
亮绿色92102
亮黄色93103
亮蓝色94104
亮品红色95105
亮青色96106
亮白色97107

8位 256颜色码

《在终端中输出彩色文字》

示例

\e[31m 红色

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

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

参考资料

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

    原文作者:脉冲云_梁兴臣
    原文地址: https://segmentfault.com/a/1190000012666612
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞