GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie werden \n und \r unter Linux und Windows unterschiedlich gehandhabt?

Ich denke, \n bewegt die Nadel nach unten und \r bewegt die Nadel zum Anfang einer Zeile (links ausgerichtet)? Ich bin mir aber nicht sicher

Das stimmt mehr oder weniger, ist aber meist eine historische Kuriosität. Ursprünglich wurde der Zeilenvorschub (LF) verwendet, um das Papier auf Druckern und Hardcopy-Terminals (Fernschreibern) um eine Zeile vorzuschieben; Carriage Return (CR) hat den Druckkopf an den Anfang der Zeile zurückgestellt.

Vermutlich funktioniert das auch auf modernen Druckern im "Textmodus", ist aber ansonsten heute kaum noch relevant.

Wie auch immer, mir wurde gesagt, dass Windows und Linux Newlines und CarriageReturns unterschiedlich handhaben.

Der Unterschied ist einfach:OS-Designer mussten wählen, wie sie den Beginn einer neuen Textzeile in Computerdateien darstellen. Aus verschiedenen historischen Gründen wurde in der Unix/Linux-Welt ein einzelnes LF-Zeichen als Newline-Marker gewählt; MS-DOS hat CR+LF gewählt, und Windows hat dies geerbt. Daher verwenden verschiedene Plattformen unterschiedliche Konventionen.

In der Praxis stellt dies immer weniger ein Problem dar. Die Zeilenumbruchmarkierung ist wirklich nur für Programme relevant, die "einfachen Text" verarbeiten, und es gibt nicht so viele - sie betrifft meistens nur Programmquellcode, Konfigurationsdateien und einige einfache Textdateien mit Dokumentation. Heutzutage können die meisten Programme, die diese Art von Dateien verarbeiten (Editoren, Compiler usw.), mit beiden Zeilenumbruchkonventionen umgehen, es spielt also keine Rolle, welche Sie wählen.

Es gibt einige Fälle, in denen Tools auf "ihrer" Newline-Konvention bestehen (z. B. dürfen Unix-Shell-Skripte CR+LF nicht verwenden), in diesem Fall müssen Sie die richtige verwenden.


CR und LF

Der American Standard Code for Information Interchange (ASCII) definierte Steuerzeichen einschließlich CARRIAGE-RETURN (CR) und LINE-FEED (LF), die verwendet wurden (und werden), um die Druckposition auf Druckern analog zu steuern mechanische Schreibmaschinen, die den frühen Computerdruckern vorausgingen.

Plattformabhängigkeit

Unter Windows ist das traditionelle Zeilentrennzeichen in Textdateien CR gefolgt von LF

In alten (vor OSX) Apple Macintosh-Systemen war das traditionelle Zeilentrennzeichen in Textdateien CR

In Unix und Linux ist das traditionelle Zeilentrennzeichen in Textdateien LF.

\n und \r

In vielen Programmier- und Skriptsprachen \n bedeutet "neue Zeile". Manchmal (aber nicht immer) bedeutet dies das ASCII-Zeichen LINE-FEED (LF), das, wie Sie sagen, den Cursor (oder die Druckposition) um eine Zeile nach unten bewegt. In einem Drucker oder einer Schreibmaschine würde dies das Papier tatsächlich um eine Zeile nach oben verschieben.

Immer \r bedeutet das ASCII CARRIAGE-RETURN-Zeichen (CR), dessen Name eigentlich von mechanischen Schreibmaschinen stammt, bei denen es eine Wagenrücklauftaste gab, die bewirkte, dass sich die Rolle ("Wagen"), die das Papier trug, nach rechts bewegte, angetrieben von einer Feder, wie soweit es gehen würde. Dadurch wird die aktuelle Schreibposition auf den linken Rand gesetzt.

Programmierung

In einigen Programmiersprachen \n kann eine plattformabhängige Folge von Zeichen bedeuten, die Zeilen in einer Textdatei beenden oder trennen. Zum Beispiel in Perl, print "\n" erzeugt unter Linux eine andere Zeichenfolge als unter Windows.

Wenn Sie in Java die nativen Zeilenenden für die Laufzeitplattform verwenden möchten, ist es am besten, \n nicht zu verwenden oder \r überhaupt. Sie sollten System.getProperty("line.separator") verwenden . Sie sollten \n verwenden und \r wo Sie LF und CR wollen, unabhängig von der Plattform (z. B. wie in HTTP, FTP und anderen Internet-Kommunikationsprotokollen verwendet).

Unix-stty

In einer Unix-Shell ist der stty Der Befehl kann verwendet werden, um die Shell zu veranlassen, zwischen diesen verschiedenen Konventionen zu übersetzen. Zum Beispiel stty -onlcr bewirkt, dass die Shell anschließend alle ausgehenden LFs in CR LF übersetzt.

Linux und OSX folgen den Unix-Konventionen

Textdateien

Textdateien sind nach wie vor enorm wichtig und weit verbreitet. Beispielsweise sind HTML und XML Beispiele für Textdateien. Die meisten wichtigen Internetprotokolle wie HTTP folgen den Konventionen für Textdateien und enthalten Spezifikationen für Zeilenenden.

Drucker

Die meisten Drucker außer den billigsten respektieren immer noch CR und LF. Tatsächlich sind sie grundlegend für die am weitesten verbreiteten Seitenbeschreibungssprachen - PCL und Postscript.


Kurz gesagt, wurde für Drucker benötigt, aber jetzt machen die Betriebssysteme es etwas anders. In den meisten Fällen ist es in Ordnung, einfach sowohl CR als auch LF zu machen, indem Sie \r\n ausführen und in den meisten Fällen wird dies problemlos funktionieren.


Linux
  1. So booten Sie Linux und Windows dual

  2. So starten Sie Kali Linux und Windows 10 dual

  3. Zugriff auf Linux-Dateisysteme in Windows 10 und WSL 2

  4. So installieren Sie Wine und führen Windows-Apps unter Linux aus

  5. So starten Sie Windows 10 und MX Linux dual

So installieren und verwenden Sie Sublime Text 4 unter Linux

So booten Sie Linux Mint und Windows 10 doppelt [Anfängerhandbuch]

So booten Sie Antergos Linux und Windows UEFI doppelt

So teilen Sie Steam-Spieldateien zwischen Linux und Windows

So konvertieren Sie eine .pem-Datei in eine .ppk-Datei unter Windows und Linux

So installieren und konfigurieren Sie das Windows-Subsystem für Linux