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默认背景色
51Framed
52Encircled
53上划线未广泛支持
54Not Framed or encircled
55关闭上划线
60表意文字下环线或右边线几乎不支持
61表意文字双下划线或双右边线几乎不支持
62表意文字上划线或左边线几乎不支持
63表意文字双上划线或双左边线几乎不支持
64表意文字着重标指几乎不支持
65表意文字属性关闭
90-97设置前景色未遵循任何标准,所以每个终端都将有所不同
100-107设置背景色未遵循任何标准,所以每个终端都将有所不同
颜色表名称前景色值背景色值颜色黑3040
红3141
绿3242
黄3343
蓝3444
品红3545
青3646
白3747
亮黑(灰)90100
亮红91101
亮绿92102
亮黄93103
亮蓝94104
亮品红95105
亮青96106
亮白97107
快速查询颜色的脚本
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】获取授权信息。