Bash
ANSI 終端顏色表現異常
嘗試在終端輸出中打開和關閉背景顏色時遇到奇怪的行為:
#!/bin/sh printf "\e[48;5;203m" printf "AAA\n" printf "\e[0m" printf "BBB\n" printf "CCC\n"
我想
AAA
用紅色背景列印,然後關閉背景顏色,然後列印下一行。但是,這是輸出的樣子:更新
好的,我從一個新的終端嘗試過,它可以按預期工作。但是我仍然打開了舊的終端視窗,在那裡我得到瞭如圖所示的輸出。那裡發生了什麼?終端中是否有一些“垃圾”,這是造成這種情況的原因?
我
reset
在舊的終端視窗中做了,現在輸出是正確的。
當
AAA\n
列印在終端的最底部時,終端需要滾動文本並在底部出現一個空行。它使用目前背景顏色(紅色)顯示線條。然後BBB\n
在這個背景上列印,使用它自己的背景顏色。新的背景顏色僅影響目前行 (BBB
) 中的幾個字元,但在下一個空行出現時是相關的。實際上,下一行(CCC
將出現的位置)看起來很正常。當
AAA\n
不在底部列印時,終端不需要添加一行,空白已經存在。碰巧空白處是黑色的。要重現,請多次執行您的程式碼,直到您到達終端底部並“超越”。
以下兩個命令在重複時(每個都在自己的終端中),給出看起來相同的輸出,直到到達底部:
printf “\e[48;5;203mAAA\n\e[0m”
2. ``` printf "\e[48;5;203mAAA\e[0m\n"
在第二種情況下,背景會在
\n
.我的測試平台:Konsole 21.12.3,
TERM=xterm-256color
.