为什么 `echo abc^H` 不只打印 `ab` ?

为什么 `echo abc^H` 不只打印 `ab` ?

我记得,^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那应该可以解决它。

相关内容