Linux 終端機支援 ANSI 轉義序列,透過 printf 輸出特定格式字串即可控制前景色、背景色、粗體、底線、反白等顯示屬性。本文系統整理轉義碼對照表並提供完整範例程式。
\033[顯示方式;前景色;背景色m 內容 \033[m
\033 (八進位) = ESC 字元 (ASCII 27),也可寫 \x1b 或 \e (GCC)。m 結束設定。\033[m 或 \033[0m 重置所有屬性。| 類別 | 碼值 | 效果 |
|---|---|---|
| 顯示方式 | 0 | 重置 (預設) |
| 1 | 粗體/高亮 | |
| 2 | 暗淡 | |
| 3 | 斜體 | |
| 4 | 底線 | |
| 7 | 反白 (前景/背景互換) | |
| 9 | 刪除線 | |
| 22/23/24/27/29 | 關閉對應屬性 | |
| 前景色 (30-37) | 30 | 黑 |
| 31 | 紅 | |
| 32 | 綠 | |
| 33 | 黃 | |
| 34 | 藍 | |
| 35 | 洋紅 | |
| 36 | 青 | |
| 37 | 白 | |
| 背景色 (40-47) | 40 | 黑 |
| 41 | 紅 | |
| 42 | 綠 | |
| 43 | 黃 | |
| 44 | 藍 | |
| 45 | 洋紅 | |
| 46 | 青 | |
| 47 | 白 | |
| 擴展 256 色 | 38;5;n / 48;5;n | n=0-255 (需終端機支援) |
| 真彩色 RGB | 38;2;r;g;b / 48;2;r;g;b | r,g,b=0-255 (現代終端機支援) |
#include
#define RESET "\033[0m"
#define BOLD "\033[1m"
#define RED "\033[31m"
#define GREEN "\033[32m"
#define YELLOW "\033[33m"
#define BLUE "\033[34m"
#define BG_WHT "\033[47m"
#define BG_BLU "\033[44m"
void demo_basic() {
printf("%s紅字%s ", RED, RESET);
printf("%s綠字%s ", GREEN, RESET);
printf("%s藍字%s\n", BLUE, RESET);
printf("%s%s粗體白底黑字%s\n", BOLD, BG_WHT, RESET);
printf("%s%s反白%s\n", "\033[7m", "反白文字", RESET);
}
void demo_256color() {
for (int i = 0; i < 16; ++i)
printf("\033[38;5;%dm██\033[0m ", i);
puts("");
for (int i = 16; i < 232; ++i) {
printf("\033[48;5;%dm \033[0m", i);
if ((i-15)%12==0) puts("");
}
for (int i = 232; i < 256; ++i)
printf("\033[38;5;%dm██\033[0m ", i);
puts("");
}
void demo_rgb() {
// 漸層紅→黃→綠
for (int i = 0; i <= 255; i += 16) {
int r = (i < 128) ? 255 : 510 - i*2;
int g = (i < 128) ? i*2 : 255;
printf("\033[38;2;%d;%d;0m██\033[0m", r, g);
}
puts("");
}
int main() {
demo_basic();
puts("\n--- 256 色示範 ---");
demo_256color();
puts("\n--- 真彩色 RGB 漸層 ---");
demo_rgb();
return 0;
}
gcc color_demo.c -o color_demo
./color_demo
輸出將顯示彩色文字、256 色調色盤、RGB 漸層方塊 (需終端機支援真彩色,如 GNOME Terminal、iTerm2、Windows Terminal)。
RED, RESET,提升可讀性。TERM 環境變數或使用 ncurses 庫的 has_colors()。\r 回車符與顏色實現動態顯示。SetConsoleMode(ENABLE_VIRTUAL_TERMINAL_PROCESSING)。export LANG=en_US.UTF-8。isatty(stdout) 為假,建議檢測後自動停用顏色。RESET,否則後續提示符會繼承顏色。善用 ANSI 轉義序列,能大幅提升命令列工具的可讀性與專業度。