2015-06-20 47 views
1

難道有人可能會指向我在網絡上的一些文檔,它將解釋bash shell如何解析以下設置顏色的線或解析器視圖中的解釋,以下內容行會被讀取?解析在bash shell中設置顏色的文本

  • 我知道要被顯示32原因墨綠色
  • 34使深藍色被displaied

但什麼是第一\用於033和什麼劑量的「M」後的32和33呢?

green ="\[\033[0;32m\]" 
blue="\[\033[0;34m\]" 

,最終這些和其他項目導出到PS1

回答

1

開始閱讀慶典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標準以來,它已經很長時間了)。
+0

值得補充的是,除了外層的''\'\''包裝它之外,序列沒有特定的bash - 它是一個終端序列。所以它告訴xterm,konsole或者你的終端仿真程序是否改變當前的顏色。這就是SGR的意思 - 它是一個「設置圖形再現」命令給終端,終端命令通常以'\ 033'開始,並以一些字母結尾。 –