Bash

ANSI 終端顏色表現異常

  • September 13, 2022

嘗試在終端輸出中打開和關閉背景顏色時遇到奇怪的行為:

#!/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.

引用自:https://unix.stackexchange.com/questions/717101