尖号方括号方括号A ^ [[A-这是什么意思?


13

抱歉,如果已经有人问过这个问题,但是我不知道如何找到自己的答案-当我在任何搜索引擎中搜索“ ^ [[A”时,它都会完全忽略“ ^ [[”部分。

无论如何,我的问题是:有时在终端机中(在Mac上),当我按箭头键时,会出现字符“ ^ [[A”,“ ^ [[B”,“ ^ [[C””或“ ^ [[D”” 。我似乎还记得几年前在使用(最可能的)DOS时遇到的情况,我认为它的发生频率也更高。

为什么会发生,这是什么意思?

Answers:


20

这些是ANSI转义码。的^[代表ESC(逃逸)字符,接下来[是一个实际的左括号和字母表示转义码的功能。该Esc[部分称为CSI(控制序列介绍器)。因此,该序列CSI A表示向上箭头或CUU(向上光标)。

无论如何,该方案可以追溯到VT100显示终端(1978年推出)的时间。VT100使用的某些转义序列在1980年代初期已由ANSI标准化,此后一直保持通用。

通常,当您按下箭头键时,某些程序(例如shell)正在侦听并可以对其执行操作。因此,当您按下向上箭头时,它会在命令历史记录中向后滚动。但是,如果正在运行的程序无法理解箭头键的转义序列,则它们通常最终会像您可能会按下的任何其他键一样,被回显到终端。因此,这就是为什么您有时会看到^[[A是否按了向上箭头键的原因。


还值得指出的是,^是在终端中显示“控件”的通用UNIX约定。例如,如果您按Ctrl + A,并且将其以相同的方式忽略,则将其显示为“ ^ A”。Ctrl + [实际上是转义字符的同义词。顺便说一句,是什么使它首先发生了?哪个软件决定打印插入符号?是终端模拟器本身,还是我不知道的其他东西?
Muzer 2015年

@Muzer内核本身对插入的字符进行插入符格式化。可以使用stty -echoctl

内核?有趣的是,我不知道它有多深入(尽管事后看来,它应该是显而易见的,因为它甚至在启动的早期就发生了!)。
Muzer 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.