Linux 终端支持使用特殊格式的字符串来表控制终端的颜色输出,通常这种用法常用于各类编程语言中(各类编程语言都可以使用)时使用,例如输出到屏幕的日志文件或有颜色的命令提示符,以便增加整体辨识度。
不只是Linux系统终端支持彩色文字,同时可以在 Windows10 及以上的系统上使用此功能,同时在UNIX和BSD系统上也支持该功能。
需要注意的是,在终端输出颜色依靠于终端的支持度,如果终端支持的功能,那么最终可以显示的字符格式就会非常有限。
Linux支持有以下几个终端标准:
- VT102
- ECMA-48
- ISO 6429
- ANSI X3.64
本文主要讲解ECMA-48中的颜色显示功能使用。还有其他的功能,可以查询man console_codes
来获取帮助信息。
格式如下:
"\e[ColorOptions{;ColorOptions..}m"
# 其中 ColorOptions为 下面 二级标题 ColorOptions 中的数值。
# 其中{} 表示可选,也就是说,ColorOptions中的参数可以不止一个
# 同时 ColorOptions 中的数值组合并没有任何前后要求
例如:
echo -e '\e[94m https://www.somata.work/ \e[0m'
echo -e '\e[93;4m https://www.somata.work/ \e[0m'
在程序日志中使用:
将命令提示符添加上颜色:
PS1='[\[\033[01;31m\]\u@\h\[\033[00m\] \[\033[01;34m\]\W\[\033[00m\]]\$ '
# 注: 由于在声明变量的时候会改变原字符含义,所以这里再 [ 上也需要添加 \ 。
# 最终效果如上图中命令提示符。
ColorOptions
数值 | 作用 | 备注 |
---|---|---|
0 | 重置 | 关闭所有属性 |
1 | 粗体 | |
2 | 弱化 | 未广泛使用 |
3 | 斜体 | |
4 | 下划线 | |
5 | 缓慢闪烁 | 低于每分钟150次 |
6 | 快速闪烁 | 每分钟150次以上 |
7 | 反显 | 前景色和背景色调换 |
8 | 隐藏 | 未广泛使用 |
9 | 划除 | |
10 | 主字体 | |
11-19 | 替换字体 | 备用字体(Linux中无法使用,并且可能导致乱码的风险) |
20 | 尖角体 | 几乎无任何支持 |
21 | 关闭粗体 | |
22 | 正常颜色或强度 | |
23 | 非斜体、非尖角体 | |
24 | 关闭下划线 | |
25 | 关闭闪烁 | |
27 | 关闭反显 | |
28 | 关闭影藏 | |
29 | 关闭划除 | |
30-37 | 设置前景色 | 参见颜色表 |
38 | 设置前景色 | 设置256位的RGB颜色(参见脚本中的样例) |
39 | 默认前景色 | |
40-47 | 设置背景色 | 参见颜色表 |
48 | 设置背景色 | 设置256位的RGB颜色(参见脚本中的样例) |
49 | 默认背景色 | |
51 | Framed | |
52 | Encircled | |
53 | 上划线 | 未广泛支持 |
54 | Not Framed or encircled | |
55 | 关闭上划线 | |
60 | 表意文字下环线或右边线 | 几乎不支持 |
61 | 表意文字双下划线或双右边线 | 几乎不支持 |
62 | 表意文字上划线或左边线 | 几乎不支持 |
63 | 表意文字双上划线或双左边线 | 几乎不支持 |
64 | 表意文字着重标指 | 几乎不支持 |
65 | 表意文字属性关闭 | |
90-97 | 设置前景色 | 未遵循任何标准,所以每个终端都将有所不同 |
100-107 | 设置背景色 | 未遵循任何标准,所以每个终端都将有所不同 |
注:此表格是从https://zh.wikipedia.org/wiki/ANSI转义序列 中复制,并做了部分修改。
颜色表
名称 | 前景色值 | 背景色值 | 颜色 |
---|---|---|---|
黑 | 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 | ![]() |
快速查询颜色的脚本
ColorOptions 中的实现
#!/usr/bin/bash
# 注: 次脚本请勿再Linux终端使用,会导致终端乱码,只能通过重启解决。
# 最好使用 xshell 或 putty 终端中使用。
for i in {0..255};do
printf "\e[%sm %3s\t \e[0m" $i $i
if [ $((($i + 1) % 6)) == 4 ] ; then
echo
fi
done
在 Linux终端下执行:
在 xshell 终端下的执行:
256位颜色查询
#!/bin/bash
# 次脚本来自 https://misc.flogisoft.com/bash/tip_colors_and_formatting
# 可以在Linux终端和SSH远程连接上尝试,就会发现
# Linux终端(TLI终端)默认支持的颜色种类明显不足
for i in 38 48 ; do
for j in {0..255} ; do
printf "\e[${i};5;%sm %3s \e[0m" $j $j
if [ $((($j + 1) % 6)) == 4 ] ; then
echo
fi
done
done
在Linux终端下执行:
在 xshell 下执行:
本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【3LO1LURJ】获取授权信息。