我记得,^H
意思是Backspace。我通过按CTRL+V,生成它CTRL+H。
因此,^H
应该删除最后一个字符,因为它Backspace与我按下Backspace这个位置时的效果相同。
为什么 的输出echo abc^H
仍然存在abc
而不是ab
?
答案1
backspace只是向后移动光标。
backspace(或delete任何字符,取决于配置)仅在满足以下条件时删除最后打印的字符:
- 它是在键盘上输入的,而不是像
echo
示例中那样的命令输出 - 终端设备处于煮熟模式(通常情况)
如果要删除c示例中的 ,则需要用另一个字符覆盖它,例如:
echo "abc^H "
答案2
通过键入 ^V^H,您将在字符串中插入退格代码,而不是发出退格命令。 ^H 不需要是破坏性的退格键;有些软件用它来叠印。
事后思考:echo(1) 的创建者推断,如果您键入 ^V 和控制代码,那么您这样做是因为您需要另一个进程(而不是 echo(1))来解析控制代码。在使用 Ctrl-H 的情况下,echo(1) 将 0x08 放入输出字符串中,并用脱字符号和 H 来显示。如果该字符串被重定向到在其 INPUT 中将 0x08 解析为破坏性退格的内容,您可能会得到期望的结果。
答案3
stty erase ^H
那应该可以解决它。