ANSI 转义颜色代码有几种不同的变体。最古老和最广泛支持的是 3 位和 4 位颜色 discussed in other answers。但是,该标准还有 2 个更新的版本提供了更多的颜色:
对每种颜色范围的支持取决于您运行的终端实现。至少以下终端支持 24 位“真彩色”前景色和背景色:Xterm、KDE 的 Konsole、iTerm 和所有基于 libvte 的终端(包括 GNOME 终端)。
根据this article,大约在 2016 年 9 月 22 日,Windows 10 控制台已更新为支持“24 位 RGB 真彩色”(截至 Windows 10 Insiders Build #14931)。这篇文章没有明确说明这种 24 位颜色与 ANSI 兼容,但它确实引用了使用“Linux 的 Windows 子系统 (WSL)”来运行“一些 Linux 脚本和工具来演示控制台的新 24 位颜色支持” .所以,我会假设它是 ANSI 兼容的。
有关 ANSI 颜色标准的完整 Wiki 文章可以在 here 找到。
用法:
为那些从未使用过 ANSI 转义码的人快速回顾一下。要使用 ANSI 转义序列,请将其视为字符串,并将其打印到控制台。这将更改控制台之后打印的所有文本的样式。
您可以重置样式,但打印转义序列:
\033[0m
这会将所有样式重置为默认值。
Bash 脚本 4 位示例:
echo -e "\033[31mHello, World!\033[0m"
Java 示例 4 位示例:
String escapeCode = "\033[31m";
String resetCode = "\033[0m";
System.out.println(escapeCode + "Hello, World!");
System.out.println("Some more stuff I want to say.");
System.out.println(resetCode);
System.out.println("Now styling is default again.");
前言:
ANSI 转义序列以转义字符开头,但该字符可以用几种不同的方式编写,具体取决于您希望如何格式化数字。以下所有内容都是等效的:
\033
\u001B
//The character with the numeric value of 27.
//Example in Java:
char escapeChar = (char) 27;
8 位(256 色)
文本颜色(前景)
\033[38;5;__m
背景颜色
\033[48;5;__m
'm' 终止转义序列。将“__”替换为 0-255 之间的数字。换算表见the wiki。
Ex (Teal - FG): \033[38;5;79m
Ex (Pink - FG): \033[38;5;207m
Ex (Teal - BG): \033[48;5;79m
Ex (Pink - BG): \033[48;5;207m
24 位“真彩色”
文本颜色(前景)
\033[38;2;<R>;<G>;<B>m
背景颜色
\033[48;2;<R>;<G>;<B>m
'm' 终止转义序列。将“”替换为 0-255 之间的数字。有关显示所有可能颜色的图表,请参阅 this article。
Ex (Teal - FG): \033[38;2;27;161;147m
Ex (Pink - FG): \033[38;2;255;143;184m
Ex (Teal - BG): \033[48;2;27;161;147m
Ex (Pink - BG): \033[48;2;255;143;184m
您还可以将它们组合成一个巨大的转义序列。
Ex (Pink BG & Teal FG): \033[48;2;255;143;184;38;2;27;161;147m
您还可以使用其他文本装饰,例如下划线、删除线、粗体、模糊、反转 FG 和 BG 等。请参阅this table。
注意:在处理 8 位和 24 位颜色代码时会覆盖 SGR 代码 2 和 5。
例如:“38;5;”表示 8 位前景文本颜色,即使单独使用,“5”表示缓慢闪烁。