Answers:
这些字符串是您键入的特殊字符的原始表示形式(例如home,end,箭头,tab等)。
它们的有害影响由您运行的命令控制,如果它从终端接收输入,则这些字符将成为其输入的一部分。
如果它不从终端获取输入,那么它对我所知道的任何Unix风格都不会有任何不利影响。
键盘上的某些键与实际字符不符。例如,A对应于字符,a
但是Up和F1键没有自己的专用字符。当按下那些特殊键时,终端会将按键转换为多个字符的特殊序列,通常以转义字符开头(通常显示为^[
),而不是获得与该键相对应的单个字符。例如,Up通常生成序列^[[A
(一个键包含3个字符:scape [
、、和A
)。
通常看不到的原因^[[A
是因为大多数控制台应用程序都足够聪明,可以将特殊序列转换为有用的命令,而不仅仅是将其回显到控制台。为此,他们关闭了终端的内置回显,并进行了自己的下层处理。例如,当bash
看到时^[[A
,¹便意识到这意味着您按下了按钮Up而不是回显^[[A
,它执行了大量工作来删除您到目前为止所键入的内容,取回历史记录中保存的先前命令,然后打印该命令。
如果看到^[[A
当按下Up,即通常意味着终端回送被接通和前台进程(一个在终端的控制)是没有做上述任何特殊的处理。这可能是因为应用程序只是忽略了终端(就像大多数非交互式命令一样)。请注意,通常,外壳程序将终端置于规范模式,并在运行前台进程之前打开回显,并在退出命令后重新获得终端的控制权后,便会恢复其自身的设置。
回声似乎相当无害。请记住,如果未从终端读取正在运行的命令,则您通过键盘生成的字符可能会出现在bash
的输入队列中,因此请小心键入,因为一旦bash
恢复读取,它们可能会被解释为普通命令从终端。
¹这实际上是一个过分的简化。由于特定序列可能会因终端类型而异,因此在控制台应用程序和终端本身之间通常存在多层抽象库。例如,bash
使用该readline
库执行其大部分输入。