O comportamento de C-m , C-i , etc. é implementado por bash, mas o fato de que eles são a mesma coisa que Retorna , Tab , etc. é devido ao comportamento do terminal. Todos os terminais se comportam assim porque todos os terminais sempre se comportaram assim e é o que as aplicações esperam. A interface entre um terminal e um aplicativo é baseada em caracteres (na verdade, bytes), não em chaves, portanto, chaves que não enviam caracteres imprimíveis e combinações de teclas precisam ser codificadas de alguma forma. Consulte Como a entrada de teclado e a saída de texto funcionam? para mais sobre este assunto. Consulte também link
TAB é o caractere de tabulação em ASCII , e é a mesma coisa que o caractere Ctrl + I em ASCII . Da mesma forma para as outras chaves. Os terminais enviam esse caractere quando o usuário pressiona a tecla Tab e quando o usuário pressiona Ctrl + I . Idem para RET (CR) e C-m , para LFD e C-j (que a maioria dos teclados não possui) e para ESC e C-[ . Há também BackSpace que envia C-h ou C-? , o que é um problema.
A configuração do terminal ( stty settings) também pode ser usada, e isso afeta algumas das configurações do bash (por exemplo, após stty erase @ , o bash tratará pressionando @ como BackSpace), mas não C-m e C-j para enviar a linha atual.
^[[D é Esc [ D , mas com um% mai D . Se você pressionar Esc [ D , o bash verá a tecla Esquerda , devido à declaração das seqüências de escape da chave do cursor no termcap ou terminfo banco de dados. Não há nenhuma ligação padrão para Esc [ d (não é uma seqüência de escape que os terminais comuns enviam).