GNU/Linux >> Tutoriales Linux >  >> Linux

¿En qué se diferencian \n y \r en Linux y Windows?

Creo que \n mueve la aguja hacia abajo y \r mueve la aguja al comienzo de una línea (alineación a la izquierda)? Aunque no estoy seguro

Esto es cierto, más o menos, pero sobre todo una curiosidad histórica. Originalmente, el salto de línea (LF) se usaba para hacer avanzar el papel una línea en impresoras y terminales impresos (teleimpresoras); el retorno de carro (CR) devolvió el cabezal de impresión al comienzo de la línea.

Esto probablemente todavía funcione en las impresoras modernas cuando se usa en "modo de texto", pero por lo demás tiene poca relevancia en la actualidad.

De todos modos, me dijeron que Windows y Linux manejan las líneas nuevas y los retornos de carro de manera diferente.

La diferencia es simple:los diseñadores de sistemas operativos tenían que elegir cómo representar el comienzo de una nueva línea en el texto de los archivos de computadora. Por varias razones históricas, en el mundo de Unix/Linux se eligió un solo carácter LF como marcador de nueva línea; MS-DOS eligió CR+LF y Windows lo heredó. Por lo tanto, diferentes plataformas usan diferentes convenciones.

En la práctica, esto se está convirtiendo cada vez menos en un problema. El marcador de nueva línea solo es relevante para los programas que procesan "texto sin formato", y no hay tantos; en su mayoría, solo afecta el código fuente del programa, los archivos de configuración y algunos archivos de texto simples con documentación. Hoy en día, la mayoría de los programas que manejan este tipo de archivos (editores, compiladores, etc.) pueden manejar ambas convenciones de nueva línea, por lo que no importa cuál elija.

Hay algunos casos en los que las herramientas insisten en "su" convención de nueva línea (por ejemplo, los scripts de shell de Unix no deben usar CR+LF), en cuyo caso debe usar la correcta.


CR y LF

El Código Estándar Estadounidense para el Intercambio de Información (ASCII) definió caracteres de control que incluyen RETORNO DE CARRO (CR) y AVANCE DE LÍNEA (LF) que se usaban (y aún se usan) para controlar la posición de impresión en las impresoras de una manera análoga a la máquinas de escribir mecánicas que precedieron a las primeras impresoras informáticas.

Dependencia de la plataforma

En Windows, el separador de línea tradicional en los archivos de texto es CR seguido de LF

En los sistemas Apple Macintosh antiguos (anteriores a OSX), el separador de línea tradicional en los archivos de texto era CR

En Unix y Linux, el separador de línea tradicional en los archivos de texto es LF.

\n y \r

En muchos lenguajes de programación y secuencias de comandos \n significa "línea nueva". A veces (pero no siempre) esto significa el carácter ASCII LINE-FEED (LF), que, como usted dice, mueve el cursor (o la posición de impresión) una línea hacia abajo. En una impresora o máquina de escribir, esto movería el papel una línea hacia arriba.

Invariablemente \r significa el carácter ASCII CARRIAGE-RETURN (CR) cuyo nombre en realidad proviene de las máquinas de escribir mecánicas donde había una tecla de retorno de carro que hacía que el rodillo ("carro") que transportaba el papel se moviera hacia la derecha, impulsado por un resorte, como tan lejos como llegaría. Configurando así la posición de escritura actual en el margen izquierdo.

Programación

En algunos lenguajes de programación \n puede significar una secuencia de caracteres dependiente de la plataforma que finaliza o separa líneas en un archivo de texto. Por ejemplo, en Perl, print "\n" produce una secuencia de caracteres diferente en Linux que en Windows.

En Java, la mejor práctica, si desea usar los finales de línea nativos para la plataforma de tiempo de ejecución, es no usar \n o \r en absoluto. Deberías usar System.getProperty("line.separator") . Deberías usar \n y \r donde desea LF y CR independientemente de la plataforma (por ejemplo, como se usa en HTTP, FTP y otros protocolos de comunicaciones de Internet).

Unix stty

En un shell de Unix, el stty El comando se puede usar para hacer que el shell se traduzca entre estas diversas convenciones. Por ejemplo stty -onlcr hará que el shell traduzca posteriormente todos los LF salientes a CR LF.

Linux y OSX siguen las convenciones de Unix

Archivos de texto

Los archivos de texto siguen siendo enormemente importantes y ampliamente utilizados. Por ejemplo, HTML y XML son ejemplos de archivos de texto. La mayoría de los protocolos de Internet importantes, como HTTP, siguen convenciones de archivos de texto e incluyen especificaciones para finales de línea.

Impresoras

La mayoría de las impresoras, excepto las más baratas, aún respetan CR y LF. De hecho, son fundamentales para los lenguajes de descripción de páginas más utilizados:PCL y Postscript.


En resumen, era necesario para las impresoras, pero ahora los sistemas operativos lo hacen de manera ligeramente diferente. En la mayoría de los casos, está bien hacer tanto CR como LF haciendo \r\n y en la mayoría de los casos, esto funcionará bien.


Linux
  1. Cómo hacer un arranque dual de Linux y Windows

  2. Cómo arrancar dualmente Kali Linux y Windows 10

  3. Cómo acceder a los sistemas de archivos de Linux en Windows 10 y WSL 2

  4. Cómo instalar Wine y ejecutar aplicaciones de Windows en Linux

  5. Cómo iniciar dualmente Windows 10 y MX Linux

Cómo instalar y usar Sublime Text 4 en Linux

Cómo realizar un arranque dual de Linux Mint y Windows 10 [Guía para principiantes]

Cómo Arranque Dual Antergos Linux y Windows UEFI

Cómo compartir archivos de juegos de Steam entre Linux y Windows

Cómo convertir un archivo .pem a un archivo .ppk en Windows y Linux

Cómo instalar y configurar el subsistema de Windows para Linux