Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 終端顏色輸出完全指南:ANSI 轉義序列、printf 實戰與動態效果

編輯:Linux 教學

核心語法

printf("\033[<背景色>;<前景色>m字串\033[0m")
  • \033[ 或 \e[:CSI (Control Sequence Introducer) 起始。
  • m:SGR (Select Graphic Rendition) 結束標記。
  • \033[0m:重置所有屬性 (關鍵,否則後續輸出受影響)。

顏色代碼對照表

代碼顏色類別
30 / 40黑前景 / 背景
31 / 41紅前景 / 背景
32 / 42綠前景 / 背景
33 / 43黃前景 / 背景
34 / 44藍前景 / 背景
35 / 45洋紅/紫前景 / 背景
36 / 46青/青綠前景 / 背景
37 / 47白前景 / 背景
90-97 / 100-107高亮版 (Bright)前景 / 背景

屬性代碼

代碼效果重置代碼
0重置所有-
1粗體/高亮22
2暗淡22
3斜體23
4底線24
5閃爍25
7反轉 (前景↔背景)27
8隱藏28
9刪除線29

實戰範例

基本彩色輸出

printf("\033[41;32m背景紅 字綠\033[0m\n")
printf("\033[1;31m粗體紅字\033[0m \033[4;34m底線藍字\033[0m\n"
printf("\033[7m反轉顯示\033[0m\n")

Bash 腳本中封裝函數

color_echo() {
    local color=$1; shift
    printf "\033[${color}m%s\033[0m\n" "$*"
}
color_echo "1;32" "綠色粗體成功訊息"
color_echo "31" "紅色錯誤訊息"
color_echo "44;37" "藍底白字標題"

光標與畫面控制 (進階動態效果)

序列功能
\033[A光標上移 n 行
\033[B光標下移 n 行
\033[C光標右移 n 行
\033[D光標左移 n 行
\033[;H移動光標到第 y 行第 x 列
\033[2J清空整個螢幕
\033[K清除從光標到行尾
\033[s儲存光標位置
\033[u恢復光標位置
\033[?25l隱藏光標
\033[?25h顯示光標

動態進度條範例

#!/bin/bash
printf "\033[?25l"  # 隱藏光標
for i in {1..100}; do
    printf "\033[s"           # 儲存位置
    printf "\033[1;1H"        # 移到第1行第1列
    printf "\033[K"           # 清除行
    printf "Progress: %3d%% [", $i
    printf "%*s" $((i/2)) | tr ' ' '='
    printf "%*s" $((50-i/2)) | tr ' ' ' '
    printf "]"
    printf "\033[u"           # 恢復位置
    sleep 0.05
done
printf "\033[?25h\n"  # 顯示光標換行

C 語言中使用

#include 
#define RED     "\033[31m"
#define GREEN   "\033[32m"
#define YELLOW  "\033[33m"
#define RESET   "\033[0m"

int main() {
    printf(RED "Error: " RESET "Something went wrong\n");
    printf(GREEN "OK: " RESET "Operation successful\n");
    printf(YELLOW "Warn: " RESET "Check parameters\n");
    return 0;
}

注意事項與最佳實踐

  • 終端支援:現代終端 (gnome-terminal, konsole, xterm, Windows Terminal, VS Code 終端) 均完整支援;舊版 Windows cmd 需啟用 VT100 (Win10 1511+)。
  • 輸出重導向:輸出導向檔案/管道時,ANSI 碼會被寫入檔案,建議檢測 isatty(fileno(stdout)) 僅在終端啟用顏色。
  • 庫封裝:C 專案建議使用 ncurses、termbox、ftxui 等 TUI 庫,而非手寫轉義序列。
  • 色盲友善:避免紅綠單一編碼關鍵狀態,搭配符號/文字/粗體。

快速查閱卡片

# 前景色
for c in {30..37}; do printf "\033[${c}mColor ${c}\033[0m "; done; echo
# 背景色
for c in {40..47}; do printf "\033[${c}mColor ${c}\033[0m "; done; echo
# 組合
for fg in {30..37}; do for bg in {40..47}; do printf "\033[${bg};${fg}m F${fg} B${bg} \033[0m"; done; echo; done

結語

ANSI 轉義序列是終端彩色輸出的通用標準。掌握 \033[CODEm 語法、常用顏色/屬性代碼、光標控制序列,並封裝為腳本函數或 C 巨集,能讓命令列工具、日誌系統、TUI 介面擁有專業級的視覺回饋。

Copyright © Windows教程網 All Rights Reserved