ANSI控制碼用於在字符顯示系統中控制光標移動和字符色彩等,常用於BBS系統中。
ANSI ESCAPE SEQUENCES又稱為VT100系列控制碼,國內譯為ANSI控制碼。顧名思義,需要VT100系列終端的支持,當然現在已經不在局限於VT100了,包括xterm,linux都能很好完成。
ANSI控制碼開始的標志都為ESC[,ESC對應ASCII碼表的033(八進制),linux命令echo用-e啟用轉義,\033來輸入ESC,\033[31m即為ESC[31m。
echo:-e 用來開啟echo中的轉義,\e 或 \033 來輸出Esc符號
格式: echo -e "\033[字背景顏色;字體顏色m字符串\033[0m"
注意m後面緊跟字符串。
例如:
echo -e "\033[41;36m something here \033[0m"
其中41的位置代表底色, 36的位置是代表字的顏色
那些ascii code 是對顏色調用的始末
\033[ ; m ……\033[0m
*****************************************************
\033[0m 關閉所有屬性
\033[1m 設置高亮度
\03[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m -- \033[37m 設置前景色
\033[40m -- \033[47m 設置背景色
\033[nA 光標上移n行
\03[nB 光標下移n行
\033[nC 光標右移n行
\033[nD 光標左移n行
\033[y;xH設置光標位置
\033[2J 清屏
\033[K 清除從光標到行尾的內容
\033[s 保存光標位置
\033[u 恢復光標位置
\033[?25l 隱藏光標
\33[?25h 顯示光標
*****************************************************
字背景顏色范圍:40---49
40:黑
41:深紅
42:綠
43:黃色
44:藍色
45:紫色
46:深綠
47:白色
字顏色范圍:30---39
30:黑
31:紅
32:綠
33:黃
34:藍色
35:紫色
36:深綠
37:白色
*****************************************************
顯示字元屬性控制
[n1;n2;......m
Ⅰ設定顯示字元的屬性狀態;
Ⅱ若有兩個以上的屬性狀態要設定則以分號將代碼(n1;n2;..)隔開;
Ⅲ除非重新設定,否則原設定之屬性一直被保留;
*****************************************************
ANSI控制碼倚賴終端,不是倚賴語言,所以在shell,perl,c裡應用均沒有問題;
至於ANSI控制碼到底有哪些作用,恐怕要發揮想像了,比如裝扮終端,用顏色警示或分類等等。
顏色與代碼對應表
代碼:
#!/bin/bash
#
for(( i=40;i<47;i++ ))
{
for(( j=30;j<37;j++ ))
{
#echo $i,$j
echo -en"\033["$i";"$j"m" $i";"$j"m\033[0m"
}
echo ""
}
前面提到字背景顏色和字體顏色范圍分別是40-49和30-39,但似乎38和39、48和49並沒有差異(不會是因為我色弱吧...),將i和j的范圍調整可得:
代碼:
#!/bin/bash
#
for(( i=40;i<50;i++ ))
{
for(( j=30;j<40;j++ ))
{
#echo $i,$j
echo -en"\033["$i";"$j"m" $i";"$j"m\033[0m"
}
echo ""
}
其他字體屬性:
BTW:
對光標的控制還沒應用到,此處暫不說明。