
您知道,由特殊字元序列產生的彩色輸出,例如:
echo -e "\e[34m Hello\n \e[0m"
這將產生藍色的單字“Hello”。為此,我必須在網路上搜索,這很困難,因為不同的來源可能會說不同的內容。我想,一定有一些手冊,但我找不到它們。即使有apropos color
或類似的東西。那麼,問題是 - 我可以在哪裡找到可靠的手冊?
答案1
資訊來源太多,無法在此頁面列出:
- 命令
echo -e
使用一個擴大呈現\e
為 ASCII 27(八進位 33 或“\033”)。列印這些用途的便攜式方式printf
(POSIX)。與標準比較echo
(POSIX)。 你的例子可以重寫為
printf "\033[34m Hello\n \033[0m"
- 顏色逃逸的標準是ECMA-48(編碼字元集的控制函數)。
- 在 ECMA-48 中,8.3.117 SGR - 選擇圖形再現列出了用於設定 8 種前景顏色和 8 種背景顏色的控制序列。
- 它還列出了代碼 39/49「預設顯示顏色(實現定義)」和 38/48「為未來標準化保留;用於設定 ISO 8613-6 [CCITT 建議 T.416] 中指定的字元前景色」。也就是說,另一個組織提出了建議,但尚未(到目前為止,24 年後)成為標準的一部分。
- 仔細閱讀它,您可能會注意到該標準在許多地方都很模糊,允許有不同的解釋。它描述了句法這些控制序列,但沒有描述它們行為。為此,您必須查看相應終端的文件。
- xterm 的文檔位於XTerm 控制序列,假設您熟悉 DEC 文檔http://vt100.net
- 對於其他終端,它們的手冊頁可能會列舉控制項(如 Linux 控制台中所做的那樣)控制台程式碼)。
- 其他終端將自己記錄為“xterm”;有關討論,請參閱 xterm 常見問題解答透過計數控制項來比較版本。幸運的是,顏色控制是大多相容(但請參閱 ncurses FAQ我的終端機顯示一些未著色的空間)。
您也可以閱讀手冊頁
tput
,這允許您使用terminfo
shell 腳本中的功能。你的例子可以重寫為printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
一些來源,例如Bash 提示字元 HOWTO和進階 Bash 腳本指南提到顏色,但(即使是這些)通常也有差距和遺漏,對於 ECMA-48 沒有幫助。
- 您可以透過其他來源(例如引用的來源)等的網路搜尋副本找到大多數其他來源,並且通常很少關注實際標準。