前言
大家都知道使用ls命令列出檔案清單時,不同的檔案類型會用不同的顏色顯示。那麼如何?這樣帶顏色的文本輸出呢?答案並不複雜,不管是用shell還是C語言。
一、shell下的實現方法
先來講在shell下,如何?。用echo命令就可以實現,參看以下例子:
echo -e "33[32mHello, world!"
當你在終端裡敲下這條命令後,是不是發現系統用綠色輸出了"Hello,world!",不止如此,連之後的命令提示字元都變成了綠色?不要著急,聽我繼續說。echo
命令-e
選項的作用是啟用終端對反斜線轉義符(即)的解釋。引號內33用於引導非常規字元序列,在這裡的作用就是引導設定輸出屬性,後邊的[32m就是將前景色彩設定為綠色,字母m表示設定的屬性類別,數字代表屬性值。
設定可以單獨使用,例如:
這行命令的作用是恢複屬性為預設值,也就是說0m設定項用於恢複預設值。現在你的終端是不是又一切正常了?
理解了這些,剩下的就簡單了。用這種命令,除了設定文本前景色彩,還可以設定很多屬性。
下邊列出其他的設定項:
33[0m 關閉所有屬性 33[1m 設定高亮度 33[4m 底線 33[5m 閃爍 33[7m 反顯 33[8m 消隱 33[30m 至 33[37m 設定前景色彩 33[40m 至 33[47m 設定背景色 33[nA 游標上移n行 33[nB 游標下移n行 33[nC 游標右移n行 33[nD 游標左移n行 33[y;xH設定游標位置 33[2J 清屏 33[K 清除從游標到行尾的內容 33[s 儲存游標位置 33[u 恢複游標位置 33[?25l 隱藏游標 33[?25h 顯示光線標
各數字所代表的顏色如下:
字背景色彩範圍:40----49
40:黑
41:深紅
42:綠
43:黃色
44:藍色
45:紫色
46:深綠
47:白色
字顏色:30-----------39
30:黑
31:紅
32:綠
33:黃
34:藍色
35:紫色
36:深綠
37:白色
另外,同類的多種設定項可以組合在一起,中間用分號(;)隔開。
如下:
echo -e "33[20;1H33[1;4;32mHello,world33[0m"
這行命令首先33[20;1H將游標移動到終端第20行第1列,之後的33[1;4;32m將文字屬性設定為高亮、帶底線且顏色為綠色,然後輸出Hello,world;最後33[0m將終端屬性恢複為預設值,這樣就不會看到連命令完成後的命令提示字元也變了樣兒了。
通過以上各種命令的組合就可以實現對終端輸出地複雜控制。
二、如何在C編程中實現?
理解了以上在Shell中的實現方法,關於在C中如何?就很簡單了。可以說只需要用printf
函數代替上邊的echo -
e就OK了參見下例:
int color = 32; printf("33[20;1H33[1;4;%dmHello, world.33[0m", color);
這個例子類似上邊shell中最後那個例子,只是這裡顏色值通過變數color來指定(當然,也可以直接指定)。
三、聯想
看到這裡你可能會想,是不是在其他程式設計語言裡也可以用類似的方法實現對終端輸出的控制呢?答案是肯定的!比如在python中,可以如下輸出:
color=32 print “33[20;1H33[1;4;%dHello, world.33[0m"%color
這個例子的效果跟上邊C的例子是相同的。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流。