我试图找出为什么 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
。如果您使用cat
、printf
或其他程序编写输出,您会看到相同的行为。这是你的一个方面终端。
在这方面,终端之间可能有所不同。对于您的终端,terminfo 数据库将具有或不具有auto_left_margin
称为bw
termcap 的功能。这告诉程序是否可以使用退格键来环绕左边距,就像在某些终端上那样。如果您使用具有自动左边距的终端,则c
会出现在上一行。
如果你重新编程你的选项卡,你会看到更多不同的行为。
顺便说一句,当一个人将TAB
和结合起来时,就会发生有趣的事情。 BS
termcap 手册中 25 年前的警告是,当没有报告自动左边距功能或光标位于第一行时,退格超出边距,从System V 接口定义根据 FreeBSD 手册,乍一看可能显得古怪且过于谨慎;但世界有已知的终端控制代码处理并没有完全正确地做到这一点。
进一步阅读
- 泽德·M·本·哈利姆、埃里克·S·雷蒙德和托马斯·E·迪基。 术语信息。 FreeBSD 手册页。
- https://superuser.com/a/711019/38062
- 乔纳森·德博因·波拉德 (2001)。Windows NT 4/NT 2000/NT XP 中的 CSRSS 退格错误。。常见答案。
答案2
echo 无法返回到它开始的位置。无论您使用多少个退格键,一旦您擦除了输出的所有内容,它就会保留在初始位置。这就是为什么无论您退格多少次,您总是会看到“c”字符。