Mar*_*ter 6 shell colors bash terminal
当我尝试在终端输出中打开和关闭背景颜色时遇到奇怪的行为:
#!/bin/sh
printf "\e[48;5;203m"
printf "AAA\n"
printf "\e[0m"
printf "BBB\n"
printf "CCC\n"
Run Code Online (Sandbox Code Playgroud)
我想AAA用红色背景打印,然后关闭背景颜色,并打印下一行。然而,输出是这样的:
好的,我从一个新的终端尝试了,它按预期工作。但我仍然打开旧的终端窗口,在其中我得到如图所示的输出。那里发生了什么?终端中是否留下了一些“垃圾”,导致了这种情况?
我reset在旧的终端窗口中执行了操作,现在输出是正确的。
Kam*_*ski 19
当AAA\n打印在终端的最底部时,终端需要滚动文本并使底部出现一个空行。它使用当前背景颜色(红色)显示该行。然后BBB\n使用其自己的背景颜色打印在该背景上。新的背景颜色仅影响当前行 ( BBB) 中的几个字符,但在下一个空行出现时相关。实际上,下一行(CCC将出现的位置)看起来很正常。
当AAA\n不在底部打印时,终端不需要添加一行,空白已经存在。碰巧空白处是黑色的。
要重现,请多次运行代码,直到到达终端底部并“超越”。
重复以下两个命令(每个命令都在其自己的终端中)时,会给出看起来相同的输出,直到到达底部:
printf "\e[48;5;203mAAA\n\e[0m"
Run Code Online (Sandbox Code Playgroud)
printf "\e[48;5;203mAAA\e[0m\n"
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,背景会在 之前 \n重置。
我的测试平台:Konsole 21.12.3 TERM=xterm-256color,.