这与退格 ( \b
) 字符的行为有关。我有以下 C 程序:
int main() {
printf("Hello\b\b");
sleep(5);
printf("h\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我终端上的输出是
Helho
Run Code Online (Sandbox Code Playgroud)
随着光标前进到下一行的第一个位置。
首先,整个事情只在 5 秒睡眠后打印,因此我推断从内核到终端的输出是行缓冲的。所以现在,我的问题是:
\b\b
回退了两个空格,到了 (second) 的位置l
,那么和怎么l
被替换的差不多h
,o
应该已经被替换了\n
。为什么不是?printf("h\n");
,它会打印Hello
并返回两个字符,而不会擦除。我从其他答案中得到的这是因为非破坏性退格。为什么输入和输出的这种行为不同?也就是说,如果我在终端中输入一些东西(即使是同一个程序)并按 Backspace,它会擦除最后一个字符,但不会擦除输出。为什么?如果有帮助,我在 xterm 终端上的 Ubuntu 系统上使用 bash。