A=B\
C
significa "A é igual à string B, seguida por uma nova linha que estou ignorando, seguida por um C"
Não há CR no que você digitou, na medida em que o shell o vê. O fim de linha do Linux / Unix é um feed de linha (LF), não CR. O CR é emitido como parte do manuseio do terminal. A maioria dos terminais precisa de um avanço de linha para descartar uma linha e um retorno de carro para enviar o cursor de volta para a esquerda. O CR é inserido pelo kernel, ao enviar um Line Feed para o terminal, quando o terminal precisa disso - IOW, ele não é visível para o shell. Observe que, por exemplo, um editor visual pode separar o uso de CR e LF - o menor número de caracteres para a próxima parte da tela a ser reescrita pode envolver um LF (para ir direto para a página sem alterar a coluna).
Um pouco mais confuso, também há uma tradução de entrada para teclados. A tecla Enter geralmente envia um retorno de carro (Control-M). Mas, para reconhecer que um comando foi inserido, o shell precisa ver um Fim de Linha. Um stty
parâmetro adicional descreve, portanto, para o tratamento do terminal do kernel, que um CR de entrada deve ser convertido em um fim de linha. Portanto, o shell ainda não vê um CR.
O resultado final é que o terminal envia:
A=B\<CR>C<CR>
O shell recebe:
A=B\<LF>C<LF>
O shell analisa isso como "oh, nova linha de barra invertida - eu simplesmente ignoro isso" e termina com:
A=BC<LF>
E na saída, o kernel modifica a sequência enviada ao terminal durante a entrada do comando como:
A=B\<CR><LF>C<CR><LF>
O processamento de núcleo de manipulação do terminal é gerido pelo comando shell stty
e dependendo da implementação (Linux, Mac OS X, * BSD), subjacente detalhes devem estar sob man termios
, man tty_ioctl
. man console_ioctl
etc.