開始閱讀慶典是Bash Prompt HOWTO最好的地方,特別是部分Bash Prompt Escape Sequences。
字符\033
(稱爲ESC或逃逸),接着是左方括號[是這樣的7位字符形成ECMA-48控制序列引發劑(CSI)。那開始一個控制序列,它一直持續到最後的字符(必須從64-126範圍內),在這種情況下它是m。最後一個字符是確定它是什麼類型的控制序列的東西之一—這一個是SGR(設置圖形再現)。
儘管大多數最終字符是字母(A-Z或a-z),但其中一些不是。 XTerm Control Sequences列出了一些例如:
CSI Pm ` Character Position Absolute [column] (default = [row,1])
(HPA).
CSI Pt; Pl; Pb; Pr $ {
Selective Erase Rectangular Area (DECSERA), VT400 and up.
Pt; Pl; Pb; Pr denotes the rectangle.
CSI Ps ' |
Request Locator Position (DECRQLP).
CSI Pm ' }
Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.
CSI Pm ' ~
Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.
對於示例
green ="\[\033[0;32m\]"
把它拆開:
- 的
\[
和\]
告訴bash打折的封閉式字符(不將它們算作寬度可打印字符)。這是特定於bash的。如果您使用zsh,則可以使用different way來做同樣的事情。大多數shell(如ksh
)不提供此功能。
- SGR序列中的
0
將重置SGR序列可能設置的任何屬性(如顏色)。
;
分號將下一個參數與特定顏色分開。
- ECMA-48定義了8個前景色和8個背景色(通常稱爲「ANSI色彩」,儘管自從出現相應的ANSI標準以來,它已經很長時間了)。
值得補充的是,除了外層的''\'\''包裝它之外,序列沒有特定的bash - 它是一個終端序列。所以它告訴xterm,konsole或者你的終端仿真程序是否改變當前的顏色。這就是SGR的意思 - 它是一個「設置圖形再現」命令給終端,終端命令通常以'\ 033'開始,並以一些字母結尾。 –