在终端输出彩色字体
在 2024-04-19 发布于 linux系统 分类
在终端中输出彩色文字,通常需要使用特定的转义序列,这些转义序列定义了文字的颜色。
试着运行下面的命令,你将看到红色的"Hello World!":
echo -e "\033[31mHello, World!\033[0m"
下面拆解一下:
- echo命令的-e选项,它允许解释反斜杠\作为转义字符。
\033
是一个使用8进制编码的转义字符,等价于16进制的\x1b
,本质上就是ascii字符中的“转义字符”。所以这么写也是可以的:echo -e "\x1b[31mHello, World!\x1b[0m"
\033[<数字>m
是一个固定的语法,定义接下来的文本颜色(或背景颜色)。当数字是31的时候,就表示文字颜色为红色。当数字是0的时候,表示将样式复原。
这里用的其实是"ANSI转义序列",常见的定义如下:
- 重置颜色:\033[0m
- 设置前景色:\033[31m(红色)、\033[32m(绿色)、\033[33m(黄色)、\033[34m(蓝色)、\033[35m(紫色)、\033[36m(青色)、\033[37m(白色)
- 设置背景色:\033[41m(红色背景)、\033[42m(绿色背景)等
要想直观的查看完整的转移序列定义,可以用这个单行命令:
for i in `seq 110`; do echo -en '\033['$i'm'$i'\033[0m '; done
或者用python:
for i in range(110): print(f'\033[{i}m{i}\033[0m', end=' ')
可以看到30-37, 40-47, 90-97, 100-107这些数字都是表示颜色的,有的是文本颜色,有的是背景颜色。