¿De qué se escapa realmente el carácter de barra diagonal inversa "\"?

13

¿De qué se escapa realmente la barra invertida?

Se usa como un personaje para escapar. Pero siempre me pregunto qué se escapa o de qué se escapa.

Sé que "\ n" designa una nueva línea. Pero, ¿dónde entra el escape? ¿Por qué se llama así?

Sr. codificador
fuente
15
Se está escapando de mi ira cuando arruina mis cuerdas.
Joel Etherton el

Respuestas:

37

La barra invertida se utiliza como un marcador para indicarle al compilador / intérprete que el siguiente carácter tiene un significado especial. Lo que significa el próximo personaje depende de la implementación. Por ejemplo, los lenguajes de estilo C usan \ n para significar nueva línea y \ t para significar pestaña.

El uso de la palabra "escape" realmente significa escapar temporalmente del análisis del texto y pasar a otro modo en el que el carácter posterior se trata de manera diferente.

Sean
fuente
8
Dependiendo del carácter, una barra invertida puede indicarle al compilador / intérprete que el siguiente carácter no tiene un significado especial. Por ejemplo, al escapar de las comillas.
Ryan Kinal
12
O escaparse a sí mismo.
Malfist
12

:))

Es un término relacionado con el de una secuencia de escape y una tecla Esc (escape).

El personaje en sí no está "huyendo" de ningún otro personaje. Se podría decir que el carácter que sigue al carácter de escape (digamos, \ n de su ejemplo) escapa al destino de ser usado como un n ordinario en alguna aplicación, y se usa en cambio como una nueva línea.

Torre
fuente
3

Las secuencias de escape tienen mucho en común con el concepto de comunicación fuera de banda :

También se usa a veces para describir qué comunicaciones llaman las personas caracteres de cambio, como el ESC que lidera las secuencias de control para muchos terminales, o los indicadores de cambio de nivel en los antiguos códigos Baudot de 5 bits.

Digamos que está haciendo una transferencia de archivos a través de un puerto serie y negocia con la computadora en el otro extremo: "OK, aquí viene el archivo". Dado que, en el caso general, todos los caracteres pueden ser caracteres de archivo válidos (si es un archivo ASCII) tiene algunos problemas:

  • ¿Cómo sabes dónde está el final de la secuencia?
  • Algunos esquemas usan ASCII NUL (cero) para terminar, como cadenas en algunos idiomas, pero entonces no puede tener ese carácter en el archivo. Eso no está permitido en algunas configuraciones, como las transferencias de archivos. Cero podría ser un personaje válido.
  • Puede enviar primero la longitud esperada del archivo, pero ¿qué sucede si necesita abortar?

Varias personas a lo largo de la historia de la informática han implementado muchos métodos diferentes para solucionar este problema.

En el caso de cadenas literales en un lenguaje de programación, es un problema similar. La primera cita dice "aquí viene la cadena: comience a leer hasta que obtenga otra cita". Por supuesto, entonces tiene el problema de enviar un carácter de cita, por lo que inventaron la secuencia de escape de barra. Si ve una barra oblicua y luego una cita, entonces esa es una cita literal, no el final de la cadena. Lamentablemente, se tragó una araña para comerse una mosca, porque ahora no puede enviar la combinación literal de barra oblicua. Entonces, puedes escapar de una barra con otra barra. Entonces barra-barra significa barra, barra-cita significa cita. Eso les permitió usar la barra diagonal para otros caracteres no imprimibles o difíciles de imprimir, como retornos de carro, avances de línea, pestañas, etc.

Scott Whitlock
fuente
3

Es un escape del contexto de análisis , que es exigente (qué villano) nser interpretado como en nlugar de como un newline.

La distinción más interesante al respecto es que un escape no cambia el contexto de análisis de la forma en "que lo haría un carácter de comillas (o muchos otros símbolos), lo que requiere que otro "(o algún otro símbolo) regrese al contexto anterior. Simplemente se divierten un poco, pero vuelven a la carretera lo antes posible.

Sin embargo, nadie habla más sobre contextos de análisis , por lo que ya nadie parece escribir analizadores, desde el advenimiento de xml y json. Algunos problemas dejan de ser convencionales, entran en un nicho y conceptos de nicho extraños como ese permanecen persistentes.

ZJR
fuente