Os teclados enviam eventos para o computador. Um evento diz “escanear código nnn para baixo” ou “escanear código nnn para cima”. No outro extremo da cadeia, os aplicativos em execução em um terminal esperam uma entrada na forma de uma sequência de caracteres. (A menos que eles tenham solicitado acesso bruto, como o servidor X faz.) Quando você pressiona A , o teclado envia a informação “código de varredura 38 para baixo”. O driver do console pesquisa seu mapa de teclas e o transforma em "caractere a
" (se nenhuma tecla modificadora for pressionada ).
Quando você pressiona uma tecla ou combinação de teclas que não resulta em um caractere, as informações precisam ser codificadas em termos de caracteres. Algumas teclas e combinações de teclas têm caracteres de controle correspondentes, por exemplo. Ctrl + A envia o caractere ␁
(valor de byte 1), Retorna envia o caractere ␍
(Ctrl + M, valor de byte 13), etc. A maioria das teclas de função não tem um caractere correspondente e, em vez disso, envia uma sequência de caracteres que começa com o caractere ␛
(escape, valor de byte 27). Por exemplo, a chave Up é traduzida na seqüência de escape ␛[A
(três caracteres: escape, colchete, maiúscula A).
O prompt de nome de usuário no console é burro e não entende a maioria das seqüências de escape. Ele não tem a edição de linha e os recursos de histórico aos quais você está acostumado: eles são fornecidos pelo shell e, até você efetuar login, não tem um shell. Por isso, simplesmente exibe a seqüência de escape. Não há glifo para o caractere ␛
, portanto, ele é exibido como ^[
. O sinal ^
é tradicionalmente usado como um prefixo para caracteres de controle e escape é ^[
devido ao seu valor de byte: é o valor de byte de [
, menos 64.
Se você pressionar Acima em um prompt do shell, isso enviará a mesma sequência de 3 caracteres para o seu shell. O shell interpreta isso como uma sequência de comandos (normalmente para recuperar o item de histórico anterior). Se você pressionar Ctrl + V então Acima em um prompt do shell, isto insere a seqüência de escape no prompt: Ctrl V é um comando para inserir literalmente o próximo caractere em vez de interpretá-lo como um comando, portanto, o caractere ␛
não é interpretado como o início de uma seqüência de escape.
Algumas chaves são apenas modificadores e não são transmitidas para aplicativos do terminal. Por exemplo, quando você pressiona Shift , esta informação fica no driver do terminal, e é levada em consideração se você pressionar A , então o driver envia A
para o aplicação em vez de a
.
Além disso, algumas teclas de função podem não estar mapeadas em seu console.
Para uma exibição semelhante na GUI, consulte Qual é o meta do bash? chave?