在原始模式下,如果您在终端中键入字符,另一端的应用程序将读取键入字符的 ASCII 代码。
但是,当您在终端中按退格键时,另一端的应用程序会读取什么内容呢?
答案1
实际上,如果您在终端中键入一个字符,应用程序将读取该字符。
好吧,更准确地说,如果你在终端中输入一个字符,它会被转换为一个或多个字节——大多数现代 Unix 系统使用UTF-8字符的编码。应用程序读取这些字节并重新组装字符。这仍然不是 ASCII 代码 — ASCII 是一种 7 位编码,因此 ASCII 字符集中的所有字符都适合一个字节。
当您键入功能或光标键(例如BackSpace、Tab、Return、F1、Left等)时,它会被编码为控制字符或一个转义序列。有一些控制字符与功能键相对应,例如 ^I(字节值 9)Tab和 ^M(字节值 13)Return。大多数其他功能键发送以转义字符(^[,字节值 27)开头的转义序列。
BackSpace发送一个控制字符。由于历史原因,它发送哪个控制字符取决于终端及其配置:它可以是 ^H(字节值 8)或 ^? (字节值 127)。在许多现代终端上,您可以在配置中更改此设置;看如何在无缓冲/非规范模式下允许退格?。如果未自动选择该设置,您可以使用 来声明它stty
。
有关更多背景信息,请参阅键盘输入和文本输出如何工作?和如何为定义 GNU 屏幕“命令字符”提供一套全面的可能性?