尝试打印向上向下箭头键

尝试打印向上向下箭头键

我有这个:

我读向下箭头键

abc@abc-ubuntu:~/bashpratice$ read -n 3 key
^[[Babc@abc-ubuntu:~/bashpratice$ 

我能够找到它

abc@abc-ubuntu:~/bashpratice$ echo $key | grep '\['
[B
abc@abc-ubuntu:~/bashpratice$ echo $key | grep '\[B'
[B

但回显键只会打印空格

abc@abc-ubuntu:~/bashpratice$ echo $key

abc@abc-ubuntu:~/bashpratice$ 

为什么回显按键只会给出空格?

答案1

在终端中输入 downarrow 时会发生什么

据报道xxd -p,当输入+时return

xxd -p
^[[B
1b5b420a

向下箭头键会导致 3 个字符的序列:

  • 第一个是\x1b(又名转义,请参阅man ascii),在终端上回显为^[
  • 第二个是\x5b,也就是说[
  • 第三是\x42,就是B

最后一个字符\x0a只是换行符。

因此,downarrow 在终端上回显为^[[B。实际上,这对应于1b5b42十六进制序列,它是实际发送到读取进程的序列。

关于你的实验

您的key变量包含1b5b42十六进制序列。检查一下

echo -n "$key" | xxd -p
1b5b42

当然,grep将能够捕获5b42十六进制序列(即[B)。

但是,当您向终端发送某些内容时,转义字符\x1b将被解释为某些特殊转义序列的开头。例如,\x1b[31m大多数终端都能识别的序列,表示“使用红色前景色”。自己检查一下:

echo -e 'hello \x1b[31myou'

该序列将更改当前颜色,但不会打印任何内容。您还可以检查一下:

echo -e 'hello \x1b[Byou'

您将看到\x1b[B终端将特殊序列解释为“将光标向下移动一位”。

这就是为什么echo $key除了一些空行之外,您不会在终端上显示直接可见的内容。


1.我不确定为什么grep会打印出来[B,我的设置有一些不同的结果。

答案2

终端不响应按键代码。这些通常由应用程序看到和解释。他们的应用程序可以发送cup(光标向上)或向下序列(通常使用 ncurses 库)。

相关内容