平時我們通過echo/print/puts/printf等等函數想標準輸出設備輸出內容是很多時候都只是為了輸出文字,並不要求有控制樣式(顏色背景等)。
但在某些情況下我們想讓程序輸出更為直觀漂亮,這個時候我們就可以考慮使用ANSI的控制序列才操作了,當然前提是當前的終端支持ANSI標準。
我們先説一下ASCII碼,標準的ASCII為128個字符,約定了個字符的編碼,前32個為控制字符,可以看一下百度百科的相關介紹。
這32個控制字符裏面,有個特殊的ESC(033/27/0x1B),該字符叫逃逸控制符,後面跟着逃逸序列,格式一般為ESC[xxxx
比如打印紅色字
shell
echo -e "\033[31mHello World\033[0m"
python
print("\033[31mHello World\033[0m")
上述代碼輸出結果
以下是完整的 ANSI 控制序列整理,包括光標控制、文本屬性、背景顏色、清屏、光標隱藏/顯示等(空格不需要,只是為了更好看):
光標控制
ESC [ H 或 ESC [ 1 ; 1 H:移動光標到左上角。
ESC [ y ; x H:移動光標到指定位置(y行,x列)。
ESC [ A:光標上移一行。
ESC [ B:光標下移一行。
ESC [ C:光標右移一列。
ESC [ D:光標左移一列。
清除行
ESC [ 0 K:清除光標右側的內容(從光標位置到行尾)。
ESC [ 1 K:清除光標左側的內容(從行首到光標位置)。
ESC [ 2 K:清除整個行的內容。
文本屬性
ESC [ 0 m:重置所有屬性。
ESC [ 1 m:加粗文本。
ESC [ 3 1 m:紅色文本。
ESC [ 3 2 m:綠色文本。
ESC [ 3 3 m:黃色文本。
ESC [ 3 4 m:藍色文本。
ESC [ 3 5 m:紫色文本。
ESC [ 3 6 m:青色文本。
ESC [ 3 7 m:白色文本。
背景顏色
ESC [ 4 0 m:黑色背景。
ESC [ 4 1 m:紅色背景。
ESC [ 4 2 m:綠色背景。
ESC [ 4 3 m:黃色背景。
ESC [ 4 4 m:藍色背景。
ESC [ 4 5 m:紫色背景。
ESC [ 4 6 m:青色背景。
ESC [ 4 7 m:白色背景。
清屏
ESC [ 2 J:清除屏幕。
ESC [ 1 J:清除光標上方的內容。
ESC [ 0 J:清除光標下方的內容。
光標隱藏/顯示
ESC [ ? 25 l:隱藏光標。
ESC [ ? 25 h:顯示光標。
其他控制
ESC [ s:保存光標位置。
ESC [ u:恢復光標位置。
以上是 ANSI 控制序列的完整整理,涵蓋了常用的控制功能。