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.