用退格键回显

用退格键回显

我试图找出为什么 bash 中会发生这种情况。

  • 好吧,这很容易。

    $ echo -e 'a\txy\bc'
    a   xc
    
  • 好吧,这很容易。

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\bc'
    ac      xy
    
  • 好吧,这很容易。

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\b\bc'
    c       xy
    
  • 现在,为什么c左端还没有掉下来?

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\b\b\b\bc'
    c       xy
    

我预计输出是:

<a tab>xy

但显然事实并非如此。有人知道可能会发生什么吗?谢谢。

答案1

这与命令无关echo。如果您使用catprintf或其他程序编写输出,您会看到相同的行为。这是你的一个方面终端

在这方面,终端之间可能有所不同。对于您的终端,terminfo 数据库将具有或不具有auto_left_margin称为bwtermcap 的功能。这告诉程序是否可以使用退格键来环绕左边距,就像在某些终端上那样。如果您使用具有自动左边距的终端,则c会出现在上一行。

如果你重新编程你的选项卡,你会看到更多不同的行为。

顺便说一句,当一个人将TAB和结合起来时,就会发生有趣的事情。 BStermcap 手册中 25 年前的警告是,当没有报告自动左边距功能或光标位于第一行时,退格超出边距,从System V 接口定义根据 FreeBSD 手册,乍一看可能显得古怪且过于谨慎;但世界已知的终端控制代码处理并没有完全正确地做到这一点。

进一步阅读

答案2

echo 无法返回到它开始的位置。无论您使用多少个退格键,一旦您擦除了输出的所有内容,它就会保留在初始位置。这就是为什么无论您退格多少次,您总是会看到“c”字符。

相关内容