O que o caractere de escape com barra invertida “\” realmente escapa?

13

Do que a barra invertida realmente escapa?

É usado como um personagem que escapa. Mas sempre me pergunto o que está escapando ou o que está sendo escapado.

Eu sei que "\ n" designa uma nova linha. Mas onde é que entram os que escapam? Por que isso é chamado assim?

Mr Coder
fonte
15
Está escapando da minha ira quando estraga minhas cordas.
Joel Etherton

Respostas:

37

A barra invertida é usada como um caractere marcador para informar ao compilador / intérprete que o próximo caractere tem algum significado especial. O que esse próximo caractere significa depende da implementação. Por exemplo, idiomas no estilo C usam \ n para significar nova linha e \ t para significar tab.

O uso da palavra "escape" realmente significa escapar temporariamente da análise do texto e para outro modo em que o caractere subsequente é tratado de maneira diferente.

Sean
fonte
8
Dependendo do caractere, uma barra invertida pode estar dizendo ao compilador / intérprete que o caractere a seguir não possui significado especial. Por exemplo, ao escapar de aspas.
Ryan Kinal
12
Ou escapando de si mesmo.
Malfist 6/10/11
12

:))

É um termo relacionado ao de uma sequência de escape e de uma tecla Esc (escape).

O personagem em si não está "fugindo" de nenhum outro personagem. Pode-se dizer que o caractere após o caractere de escape (digamos, \ n do seu exemplo) escapa ao destino de ser usado como um n comum em algum aplicativo e é usado como uma nova linha.

Torre
fonte
3

As seqüências de escape têm muito em comum com o conceito de comunicação fora da banda :

Às vezes, também é usado para descrever quais comunicações as pessoas chamam de caracteres shift, como o ESC que lidera as seqüências de controle para muitos terminais ou os indicadores de mudança de nível nos antigos códigos Baudot de 5 bits.

Digamos que você esteja transferindo arquivos por uma porta serial e negocie com o computador do outro lado: "OK, aqui está o arquivo". Como no caso geral, todos os caracteres podem ser caracteres válidos (se for um arquivo ASCII), você tem alguns problemas:

  • Como você sabe onde fica o final do fluxo?
  • Alguns esquemas usam ASCII NUL (zero) para finalizar, como strings em alguns idiomas, mas você não pode ter esse caractere no arquivo. Isso não é permitido em algumas configurações, como transferências de arquivos. Zero pode ser um caractere válido.
  • Você pode enviar o tamanho esperado primeiro, mas e se precisar abortar?

Várias pessoas ao longo da história da computação implementaram muitos métodos diferentes para contornar esse problema.

No caso de strings literais em uma linguagem de programação, é um problema semelhante. A primeira citação diz "aqui vem a string - comece a ler até obter outra citação". Obviamente, você tem o problema de enviar um caractere de citação, então eles inventaram a sequência de escape da barra. Se você vir uma barra e depois uma citação, é uma citação literal, não o fim da sequência. Infelizmente, você acabou de engolir uma aranha para comer uma mosca, porque agora você não pode enviar a combinação literal de aspas. Assim, você pode escapar de uma barra com outra barra. Então barra-barra significa barra, barra-cotação significa cotação. Isso permitiu que eles usassem barras para outros caracteres não imprimíveis ou difíceis de imprimir, como retornos de carro, linhas de alimentação, guias etc.

Scott Whitlock
fonte
3

É uma fuga do contexto de análise , que exige (que vilão) nser interpretado como ao ninvés de um newline.

A distinção mais interessante é que uma fuga não muda o contexto de análise da maneira como um caractere de citação "(ou muitos outros símbolos) faria, exigindo que outro "(ou algum outro símbolo) voltasse ao contexto anterior. Eles apenas se divertem um pouco, mas voltam à estrada o mais rápido possível.

No entanto, ninguém fala mais sobre a análise de contextos , por mais que ninguém pareça mais escrever analisadores, desde o advento do xml e do json. Alguns problemas deixam de ser comuns, entram em um nicho e conceitos de nicho estranhos como esse permanecem por aí.

ZJR
fonte