首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Linux 終端機 ANSI 轉義序列控制文字顏色與樣式

     編輯:關於C

前言

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;nn=0-255 (需終端機支援)
真彩色 RGB38;2;r;g;b / 48;2;r;g;br,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)。

實務應用建議

  1. 封裝巨集/函式:如上例 RED, RESET,提升可讀性。
  2. 檢測終端機能力:檢查 TERM 環境變數或使用 ncurses 庫的 has_colors()。
  3. 日誌分級著色:ERROR→紅、WARN→黃、INFO→綠、DEBUG→藍。
  4. 進度條/動畫:配合 \r 回車符與顏色實現動態顯示。
  5. 跨平台注意:Windows 10+ 原生支援 ANSI;舊版需呼叫 SetConsoleMode(ENABLE_VIRTUAL_TERMINAL_PROCESSING)。

常見問題

  • 輸出亂碼:終端機編碼非 UTF-8,請設定 export LANG=en_US.UTF-8。
  • 顏色不生效:輸出重導向至檔案/管道時,isatty(stdout) 為假,建議檢測後自動停用顏色。
  • 殘留顏色:務必在結尾輸出 RESET,否則後續提示符會繼承顏色。

善用 ANSI 轉義序列,能大幅提升命令列工具的可讀性與專業度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved