如何在Linux终端里用Shell和C输出带颜色的文字
一、shell下的實現方法
?????? 先來講在shell下,如何實現。用echo命令就可以實現,參看以下例子:
?????? echo? -e? "\033[32mHello, world!"
?????? 當你在終端里敲下這條命令后,是不是發現系統用綠色輸出了"Hello,world!",不止如此,連之后的命令提示符都變成了綠色?不要著急,聽我繼續說。echo命令-e選項的作用是激活終端對反斜線轉義符(即\)的解釋。引號內\033用于引導非常規字符序列,在這里的作用就是引導設置輸出屬性,后邊的[32m就是將前景色設置為綠色,字母m表示設置的屬性類別,數字代表屬性值。設置可以單獨使用,例如:
?????? echo -e? "\033[0m"
?????? 這行命令的作用是恢復屬性為默認值,也就是說0m設置項用于恢復默認值。現在你的終端是不是又一切正常了?
?????? 理解了這些,剩下的就簡單了。用這種命令,除了設置文本前景色,還可以設置很多屬性。下邊列出其他的設置項:
????? --------------------------------------------------------------------------
????? \033[0m 關閉所有屬性
????? \033[1m 設置高亮度
????? \033[4m 下劃線
????? \033[5m 閃爍
????? \033[7m 反顯
????? \033[8m 消隱
????? \033[30m?至 \33[37m 設置前景色
????? \033[40m?至 \33[47m 設置背景色
????? \033[nA 光標上移n行?
??????\033[nB 光標下移n行
????? \033[nC 光標右移n行
????? \033[nD 光標左移n行
????? \033[y;xH設置光標位置
????? \033[2J 清屏
????? \033[K 清除從光標到行尾的內容
????? \033[s 保存光標位置?
??????\033[u 恢復光標位置
????? \033[?25l 隱藏光標
????? \033[?25h 顯示光標
????? --------------------------------------------------------------------------
??????各數字所代表的顏色如下:
????? 字背景顏色范圍:40----49
???? ?40:黑
???? ?41:深紅
?? ?? 42:綠
?? ?? 43:黃色
????? 44:藍色
????? 45:紫色
????? 46:深綠
????? 47:白色
????? 字顏色:30-----------39
????? 30:黑
????? 31:紅
????? 32:綠
????? 33:黃
????? 34:藍色
????? 35:紫色
????? 36:深綠?
??????37:白色
????? 另外,同類的多種設置項可以組合在一起,中間用分號(;)隔開。如下:
????? echo -e "\033[20;1H\033[1;4;32mHello,world\033[0m"
????? 這行命令首先\033[20;1H將光標移動到終端第20行第1列,之后的\033[1;4;32m將文本屬性設置為高亮、帶下劃線且顏色為綠色,然后輸出Hello,world;最后\033[0m將終端屬性恢復為默認值,這樣就不會看到連命令完成后的命令提示符也變了樣兒了。
????? 通過以上各種命令的組合就可以實現對終端輸出地復雜控制。
二、如何在C編程中實現?
??????理解了以上在Shell中的實現方法,關于在C中如何實現就很簡單了。可以說只需要用printf函數代替上邊的echo -e就OK了。參見下例:
????? int color = 32;
????? printf("\033[20;1H\033[1;4;%dmHello, world.\033[0m", color);
????? 這個例子類似上邊shell中最后那個例子,只是這里顏色值通過變量color來指定(當然,也可以直接指定)。
三、聯想
????? 看到這里你可能會想,是不是在其他編程語言里也可以用類似的方法實現對終端輸出的控制呢?答案是肯定的!比如在Python中,可以如下輸出:
??????color=32
????? print “\033[20;1H\033[1;4;%dHello, world.\033[0m"%color
????? 這個例子的效果跟上邊C的例子是相同的
總結
以上是生活随笔為你收集整理的如何在Linux终端里用Shell和C输出带颜色的文字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: echart 地图 某个地区_一站式解决
- 下一篇: linux多系统更改启动顺序