Linux控制台输出多种样式彩色字符及原理解析
1. 前言
之前在做MIT6.824的实验的时候,有助教资料在说明如何输出彩色的字符来让日志更加清晰。所以对Linux控制台如何输出多种样式的彩色字符以及它的原理产生了兴趣,学习了之后在这里记录一下。
2. 原理
Linux控制台输出彩色字符的原理是通过ANSI转义码来实现的。ANSI转义码是一种控制字符,用于控制文本终端的行为。包括但不限于控制光标位置、颜色、清屏等。
下面这是一段输出蓝色字符的控制台代码:
1 |
|
在vscode的终端显示结果如下:
下面对这段代码逐个进行解析:
- -e:表示开启转义字符的解析,如果不加这个参数,\033会被当做普通字符输出。
- \033:表示转义字符的开始。在ASCII字符集中,十进制的33代表了Escape字符(也可以写为\033或\x1B),它通常用于表示控制序列的开始。
- [34m:表示设置颜色。34代表蓝色,m表示设置颜色的转义序列的结束。
- [0m:表示重置为默认设置。0代表默认设置,m表示设置颜色的转义序列的结束。如果不设置为默认设置,后续的字符都会被设置为蓝色。
3. 转义代码
主要与输出字符格式相关的转义代码的格式如下,可以单独使用也可以利用;来混合使用:
1 |
|
下面是一些常用的转义代码:
1. 显示方式
代码及对应显示方式如下:
- 0:所有属性关闭,恢复到默认值。
- 1:粗体或者高亮。
- 2:弱化(低亮)。(不是所有终端都支持)
- 3:斜体。(不是所有终端都支持)
- 4:下划线。
- 5,6:闪烁。(不是所有终端都支持)
- 7:反显,即前景色和背景色交换。
- 8:隐藏字符。
- 9:删除线。(不是所有终端都支持)
- 10:将文本的前景色设置为默认颜色。
- 21:双下划线。(不是所有终端都支持)
在vscode的终端显示结果如下:
2. 前景色
代码及对应颜色如下:
- 30:黑色。
- 31:红色。
- 32:绿色。
- 33:黄色。
- 34:蓝色。
- 35:洋红。
- 36:青色。
- 37:白色。
在vscode的终端显示结果如下(注意37号白色被终端自动修改了以能够显示清楚):
而38号前景色是用于设置前景色的其他模式,包括两种:
- 使用 ANSI 256 色模式设置前景色,例如:\033[38;5;196m。这里的5表示使用 ANSI 256 色模式,196表示使用ANSI 256 色模式中的第 196 种颜色
- 使用 TrueColor 模式设置前景色,例如:\033[38;2;255;0;0m。这里的2表示使用 TrueColor 模式,255;0;0表示RGB颜色值
39号表示重置前景色为默认颜色。
3. 背景色
代码及对应颜色如下:
- 40:黑色。
- 41:红色。
- 42:绿色。
- 43:黄色。
- 44:蓝色。
- 45:洋红。
- 46:青色。
- 47:白色。
在vscode的终端显示结果如下(注意47号白色被终端自动修改了以能够显示清楚):
同样的,48号背景色是用于设置背景色的其他模式,包括使用 ANSI 256 色模式设置背景色和使用 TrueColor 模式设置背景色。
49号表示重置背景色为默认颜色。
4. 其他
还有一些其他比较有意思的转义代码,不过格式就不是\033[显示方式;前景色;背景色m了,如下:
\033[n*A
:光标上移n行\033[nB
:光标下移n行\033[nC
:光标右移n行\033[nD
:光标左移n行\033[y
;xH :设置光标位置\033[2J
:清屏\033[K
:清除从光标到行尾的内容\033[s
:保存光标位置\033[u
:恢复光标位置\033[?25l
:隐藏光标\033[?25h
:显示光标
参考资料
Linux控制台输出多种样式彩色字符及原理解析
http://example.com/2024/03/02/colorfulEcho/