终端颜色控制
ANSI 转义序列(ANSI Escape Codes)是一种在终端文本界面中嵌入特殊控制指令的方法。它本质上是一串普通文本(ASCII 字符),但符合特定格式时,终端会把它解释成“命令”而不是普通文字,可以用来:
- 改变文字颜色/背景颜色
- 设置加粗、下划线、闪烁等样式
- 移动光标位置
- 清除屏幕或部分内容
- 隐藏/显示光标
颜色控制通过 CSI(Control Sequence Introducer)序列实现,基本格式为:
\033[<参数1>;<参数2>;...;<参数N><指令字母>或:
\e[<参数1>;<参数2>;...;<参数N><指令字母>\033或\e表示 ESC 字符[表示 CSI 的开始- 参数是一组十进制数字,用分号
;分隔 - 指令字母表示具体的操作(
m= 设置文本属性,H= 设置光标位置,J= 清除屏幕,K= 清除行等)
颜色控制是 ANSI 转义序列中最常用的功能之一,指令字母固定为 m:
\033[<参数1>;<参数2>;...;<参数N>m使用 \033[0m 重置所有样式,否则颜色会影响后续输出。
基本样式控制
Section titled “基本样式控制”| 代码 | 功能 |
|---|---|
| 0 | 重置所有属性 |
| 1 | 加粗 |
| 3 | 斜体 |
| 4 | 下划线 |
| 5 | 闪烁 |
| 7 | 反色(前景背景互换) |
| 9 | 删除线 |
示例:
echo -e "\033[1;4;31m加粗+下划线+红色\033[0m"基本颜色控制
Section titled “基本颜色控制”ANSI 最初定义了 8 种基本颜色,每种颜色有前景色和背景色:
| 颜色 | 前景色代码 | 背景色代码 |
|---|---|---|
| 黑色 | 30 | 40 |
| 红色 | 31 | 41 |
| 绿色 | 32 | 42 |
| 黄色 | 33 | 43 |
| 蓝色 | 34 | 44 |
| 品红色 | 35 | 45 |
| 青色 | 36 | 46 |
| 白色 | 37 | 47 |
示例:
echo -e "\033[31m红色文字\033[0m"echo -e "\033[1;33;44m加粗黄字蓝底\033[0m"以 C 语言为例,可以将 ANSI 颜色定义成宏,方便在输出中调用:
#include <stdio.h>
/* ========== 基本样式控制宏 ========== */#define RESET "\033[0m"#define BOLD "\033[1m"#define UNDERLINE "\033[4m"
/* ========== 8 色前景色 ========== */#define FG_BLACK "\033[30m"#define FG_RED "\033[31m"#define FG_GREEN "\033[32m"#define FG_YELLOW "\033[33m"#define FG_BLUE "\033[34m"#define FG_MAGENTA "\033[35m"#define FG_CYAN "\033[36m"#define FG_WHITE "\033[37m"
/* ========== 8 色背景色 ========== */#define BG_BLACK "\033[40m"#define BG_RED "\033[41m"#define BG_GREEN "\033[42m"#define BG_YELLOW "\033[43m"#define BG_BLUE "\033[44m"#define BG_MAGENTA "\033[45m"#define BG_CYAN "\033[46m"#define BG_WHITE "\033[47m"
int main() { printf(FG_RED "红色文字" RESET "\n"); printf(BG_BLUE FG_YELLOW "蓝底黄字" RESET "\n"); printf(BOLD FG_GREEN "加粗绿色" RESET "\n"); return 0;}Shell 脚本示例:
#!/bin/bash
RED='\033[31m'GREEN='\033[32m'YELLOW='\033[33m'BOLD='\033[1m'RESET='\033[0m'
echo -e "${GREEN}[OK]${RESET} 操作成功"echo -e "${RED}[ERROR]${RESET} 操作失败"echo -e "${BOLD}${YELLOW}[WARN]${RESET} 请注意"