O que acontece quando downarrow é digitado em um terminal
Conforme relatado por xxd -p
, ao digitar ↓ + retornar :
xxd -p
^[[B
1b5b420a
A tecla downarrow leva a uma sequência de 3 caracteres:
- o primeiro é
\x1b
(também conhecido como escape, vejaman ascii
), ecoado no terminal como^[
, - o segundo é
\x5b
, ou seja[
, - o terceiro é
\x42
, ou seja,B
.
O último caractere, \x0a
é apenas o caractere de nova linha.
Então, downarrow é ecoado no terminal como ^[[B
. Na realidade, isso corresponde à sequência 1b5b42
hex, que é a que realmente é enviada para o processo de leitura.
Sobre suas experiências
Sua variável key
contém a sequência hexagonal 1b5b42
. Verifique com
echo -n "$key" | xxd -p
1b5b42
É claro que grep
será capaz de capturar a sequência hexagonal 5b42
(que é [B
) <.
No entanto, quando você envia algo para o terminal, o caractere de escape \x1b
é interpretado como o início de alguma seqüência de escape especial. Por exemplo, \x1b[31m
é uma sequência reconhecida pela maioria dos terminais e significa "usar cor de primeiro plano vermelha". Verifique você mesmo:
echo -e 'hello \x1b[31myou'
A sequência mudará a cor atual, mas não imprimirá nada. Você também pode verificar isso:
echo -e 'hello \x1b[Byou'
e você verá que a seqüência especial \x1b[B
é interpretada pelo terminal como "move o cursor para baixo por um".
É por isso que o echo $key
não mostra algo diretamente visível no terminal, exceto algumas linhas em branco.
-
1. Eu não tenho certeza porque grep
acontece para imprimir apenas [B
, eu tenho algum resultado diferente na minha configuração.