La barra invertida \ es un signo que se utiliza principalmente en informática y matemáticas . Es la imagen reflejada de la barra común / . Es un signo relativamente reciente, documentado por primera vez en la década de 1930. A veces se le llama hack , whack , escape (de C / UNIX ), reverse slash , slosh , downwhack , backslant , backwhack , bash , reverse slant , reverse solidus y reversed virgule . [1] [2]
Hasta noviembre de 2022 [actualizar], los esfuerzos por identificar el origen de este carácter o su propósito antes de la década de 1960 no han tenido éxito. La referencia conocida más antigua encontrada hasta la fecha es un manual de mantenimiento de 1937 de Teletype Corporation con una fotografía que muestra el teclado de su perforadora de teclado Kleinschmidt WPE-3 utilizando el sistema Wheatstone . [3] [4] El símbolo se llamaba "tecla diagonal", [5] y se le dio un código Morse (no estándar) de ▄ ▄▄▄ ▄ ▄ ▄▄▄ . [6] [a]
En junio de 1960, IBM publicó un "estándar de conjunto de caracteres extendido" que incluye el símbolo en 0x19. [4] En septiembre de 1961, Bob Bemer (IBM) propuso al comité de estándares X3.2 que [
, ]
y \
formaran parte del estándar propuesto, describiendo la barra invertida como un "operador de división inversa" y citó su uso anterior por Teletype en telecomunicaciones. En particular, dijo, el \ era necesario para que los operadores booleanos ALGOL ( conjunción lógica ) y ( disyunción lógica ) pudieran componerse utilizando /\ y \/ respectivamente. El Comité adoptó estos cambios en el borrador del Estándar Americano (posteriormente llamado ASCII ) en su reunión de noviembre de 1961. [4] ∧
∨
Estos operadores se utilizaron para min y max en las primeras versiones del lenguaje de programación C suministrado con Unix V6 [7] y V7. [8]
En muchos lenguajes de programación como C , Perl , PHP , Python , lenguajes de script Unix y muchos formatos de archivo como JSON , la barra invertida se utiliza como un carácter de escape , para indicar que el carácter que la sigue debe ser tratado de manera especial (si de otra manera se trataría literalmente), o literalmente (si de otra manera se trataría de manera especial). Por ejemplo, dentro de una cadena literal de C, la secuencia \n
produce un byte de nueva línea en lugar de una 'n', y la secuencia \"
produce una comilla doble real en lugar del significado especial de la comilla doble que finaliza la cadena. Una barra invertida real se produce por una barra invertida doble \\
.
Los lenguajes de expresión regular lo utilizan de la misma manera, cambiando los caracteres literales subsiguientes por metacaracteres y viceversa. Por ejemplo, \||b busca '|' o 'b', la primera barra se escapa y se busca, la segunda no se escapa y actúa como un "o".
Fuera de las cadenas entre comillas, el único uso común de la barra invertida es ignorar ("escape") una nueva línea inmediatamente después de ella. En este contexto, se la puede llamar "línea continua" [9], ya que la línea actual continúa en la siguiente. Algunos programas reemplazan la barra invertida + nueva línea con un espacio. [10]
Para dar soporte a los ordenadores que carecían del carácter de barra invertida, se añadió el trígrafo de C , que es equivalente a una barra invertida. Dado que este puede escapar del siguiente carácter, que puede ser un , el principal uso moderno puede ser para la ofuscación de código . El soporte para trígrafos en C++ se eliminó en C++17 , y se planea eliminar el soporte para ellos en C en C23 .??/
?
En Visual Basic (y algunos otros dialectos BASIC ) la barra invertida se utiliza como símbolo de operador para indicar división de enteros . [11] Esto redondea hacia cero.
El lenguaje de programación ALGOL 68 utiliza el "\" como su símbolo de exponente decimal . ALGOL 68 tiene la opción de elegir entre 4 símbolos de exponente decimal: e, E, \ o 10. Ejemplos: 6.0221415e23 , 6.0221415E23 , 6.0221415\23 o 6.0221415 10 23. [12 ]
En APL, \ se llama Expand cuando se usa para insertar elementos de relleno en matrices y Scan cuando se usa para producir reducción de prefijo (plegado acumulativo).
En la versión 5.3 y superiores de PHP , la barra invertida se utiliza para indicar un espacio de nombres . [13]
En Haskell , la barra invertida se utiliza tanto para introducir caracteres especiales como para introducir funciones lambda (ya que es una aproximación razonable en ASCII de la letra griega lambda, λ) . [14]
MS-DOS 2.0, lanzado en 1983, copió la idea de un sistema de archivos jerárquico de Unix y, por lo tanto, utilizó la barra invertida como separador de directorios. [15] Posiblemente por insistencia de IBM, [16] [17] Microsoft agregó la barra invertida para permitir que las rutas se escriban en el indicador del intérprete de línea de comandos, al tiempo que conservaba la compatibilidad con MS-DOS 1.0 (en el que / era el indicador de opción de línea de comandos. Escribir " DIR/W " le daba la opción "ancha" al comando " DIR ", por lo que se necesitaba algún otro método si uno realmente quería ejecutar un programa llamado W dentro de un directorio llamado DIR ). A excepción de COMMAND.COM , todas las demás partes del sistema operativo aceptan ambos caracteres en una ruta , pero la convención de Microsoft sigue siendo usar una barra invertida, y las API que devuelven rutas usan barras invertidas. [18] En algunas versiones, el carácter de opción se puede cambiar de / a - mediante SWITCHAR , lo que permite a COMMAND.COM conservar / en el nombre del comando.
La familia de sistemas operativos Microsoft Windows heredó el comportamiento de MS-DOS y por eso todavía admite ambos caracteres, pero los programas y subsistemas individuales de Windows pueden, equivocadamente, aceptar solo la barra invertida como delimitador de ruta, o pueden malinterpretar una barra diagonal si se usa como tal. Algunos programas solo aceptarán barras diagonales si la ruta está entre comillas dobles . [19] El fracaso de las características de seguridad de Microsoft para reconocer barras diagonales en direcciones inesperadas en rutas locales y de Internet, mientras que otras partes del sistema operativo aún actúan sobre ellas, ha llevado a algunas fallas graves en la seguridad. Se ha accedido a recursos que no deberían estar disponibles con rutas que usan combinaciones particulares, como http://example.net/secure\private.aspx . [20] [21]
La barra invertida se utiliza en el sistema de composición tipográfica TeX y en archivos RTF para comenzar las etiquetas de marcado.
En USFM , [22] la barra invertida se utiliza para marcar características de formato para editar traducciones de la Biblia .
En la notación de cursor , ^\
representa el carácter de control 0x1C, separador de archivos . [23] Esto es completamente una coincidencia y no tiene nada que ver con su uso en rutas de archivos.
Se utiliza un símbolo similar a una barra invertida para la diferencia de conjuntos . [24]
La barra invertida también se utiliza a veces para indicar el espacio de clases laterales derecho . [25]
Especialmente cuando se describen algoritmos informáticos, es común definir la barra invertida de modo que a \ b sea equivalente a ⌊ a / b ⌋ . [26] Esta es una división de números enteros que redondea hacia abajo, no hacia cero.
En MATLAB y GNU Octave, la barra invertida se utiliza para dividir la matriz por la izquierda , mientras que la barra (hacia adelante) se utiliza para dividir la matriz por la derecha. [27]
En las codificaciones japonesas ISO 646-JP (un código de 7 bits basado en ASCII ), JIS X 0201 (un código de 8 bits) y Shift JIS (una codificación multibyte de 8 bits para ASCII), el punto de código 0x5C que se usaría para la barra invertida en ASCII se representa en cambio como un signo de yen ¥ . Debido al uso extensivo del punto de código 005C para representar el signo de yen, incluso hoy en día algunas fuentes como MS Mincho representan el carácter de barra invertida como ¥, por lo que los caracteres en los puntos de código Unicode 00A5 (¥) y 005C (\) se representan como ¥ cuando se seleccionan estas fuentes. Los programas de computadora aún tratan 005C como una barra invertida en estos entornos, pero lo muestran como un signo de yen, lo que causa confusión, especialmente en los nombres de archivo MS-DOS. [28]
Varias otras versiones de ISO 646 también reemplazan la barra invertida con otros caracteres, incluidos ₩ (coreano), Ö (alemán, sueco), Ø (danés, noruego), ç (francés) y Ñ (español), lo que genera problemas similares, aunque con un impacto menos duradero en comparación con el signo del yen.
En 1991, el RFC 1345 sugirió un mnemónico//
único de dos caracteres que podría usarse en los estándares de Internet como "una forma práctica de identificar [este] carácter, sin referencia a un conjunto de caracteres codificados y su código en [ese] conjunto de caracteres codificados". [29] En consecuencia, este estilo puede verse en los primeros documentos del Internet Engineering Task Force .
El manual del usuario contiene algunos errores importantes. La mayoría de ellos se deben a cambios de último momento para lograr un mayor grado de compatibilidad con la implementación de IBM de MS-DOS (PC DOS). Esto incluye el uso de "\" en lugar de "/" como separador de ruta y "/" en lugar de "-" como carácter de cambio. Para el transporte de archivos por lotes entre máquinas, Microsoft fomenta el uso de "\" y "/" respectivamente en el mercado estadounidense. [...] Pedimos disculpas por cualquier inconveniente que estos cambios puedan haber causado a su personal de publicaciones técnicas.