GNU/Linux >> Linux Esercitazione >  >> Linux

In che modo \n e \r vengono gestiti in modo diverso su Linux e Windows?

Penso che \n sposti l'ago verso il basso e \r sposti l'ago all'inizio di una riga (allineamento a sinistra)? Non ne sono sicuro, però

Questo è vero, più o meno, ma soprattutto una curiosità storica. In origine, l'avanzamento riga (LF) veniva utilizzato per far avanzare la carta di una riga su stampanti e terminali cartacei (telescriventi); il ritorno a capo (CR) ha riportato la testina di stampa all'inizio della riga.

Questo probabilmente funziona ancora sulle stampanti moderne quando viene utilizzato in "modalità testo", ma per il resto è di scarsa rilevanza oggi.

Ad ogni modo, mi è stato detto che Windows e Linux gestiscono le nuove righe ei ritorni a capo in modo diverso.

La differenza è semplicemente:i progettisti del sistema operativo dovevano scegliere come rappresentare l'inizio di una nuova riga nel testo nei file del computer. Per varie ragioni storiche, nel mondo Unix/Linux è stato scelto un singolo carattere LF come marcatore di nuova riga; MS-DOS ha scelto CR+LF e Windows l'ha ereditato. Quindi piattaforme diverse usano convenzioni diverse.

In pratica, questo sta diventando sempre meno un problema. Il marcatore di nuova riga è davvero rilevante solo per i pogrammi che elaborano "testo semplice", e non ce ne sono molti - riguarda principalmente solo il codice sorgente del programma, i file di configurazione e alcuni semplici file di testo con documentazione. Al giorno d'oggi la maggior parte dei programmi che gestiscono questo tipo di file (editor, compilatori ecc.) possono gestire entrambe le convenzioni newline, quindi non importa quale scegli.

Ci sono alcuni casi in cui gli strumenti insistono sulla "loro" convenzione di nuova riga (ad es. gli script della shell Unix non devono usare CR+LF), nel qual caso devi usare quello giusto.


CR e LF

L'American Standard Code for Information Interchange (ASCII) definiva caratteri di controllo tra cui CARRIAGE-RETURN (CR) e LINE-FEED (LF) che erano (e sono tuttora) usati per controllare la posizione di stampa sulle stampanti in un modo analogo al macchine da scrivere meccaniche che hanno preceduto le prime stampanti per computer.

Dipendenza dalla piattaforma

In Windows il tradizionale separatore di riga nei file di testo è CR seguito da LF

Nei vecchi sistemi Apple Macintosh (pre OSX) il tradizionale separatore di riga nei file di testo era CR

In Unix e Linux, il tradizionale separatore di riga nei file di testo è LF.

\n e \r

In molti linguaggi di programmazione e scripting \n significa "nuova linea". A volte (ma non sempre) questo significa il carattere ASCII LINE-FEED (LF), che, come dici tu, sposta il cursore (o la posizione di stampa) in basso di una riga. In una stampante o in una macchina da scrivere, questo sposterebbe la carta in alto di una riga.

Invariabilmente \r indica il carattere ASCII CARRIAGE-RETURN (CR) il cui nome deriva proprio dalle macchine da scrivere meccaniche dove era presente un tasto di ritorno a capo che faceva muovere verso destra il rullo ("carrello") che portava la carta, azionato da una molla, come fin dove sarebbe andato. Impostando così la posizione di digitazione corrente sul margine sinistro.

Programmazione

In alcuni linguaggi di programmazione \n può indicare una sequenza di caratteri dipendente dalla piattaforma che termina o separa righe in un file di testo. Ad esempio in Perl, print "\n" produce una sequenza di caratteri diversa su Linux rispetto a Windows.

In Java, la migliore pratica, se si desidera utilizzare le terminazioni di riga native per la piattaforma di runtime, è di non utilizzare \n o \r affatto. Dovresti usare System.getProperty("line.separator") . Dovresti usare \n e \r dove desideri LF e CR indipendentemente dalla piattaforma (ad es. come utilizzato in HTTP, FTP e altri protocolli di comunicazione Internet).

Unix stty

In una shell Unix, il stty Il comando può essere utilizzato per far tradurre la shell tra queste varie convenzioni. Ad esempio stty -onlcr farà sì che la shell traduca successivamente tutti gli LF in uscita in CR LF.

Linux e OSX seguono le convenzioni Unix

File di testo

I file di testo sono ancora estremamente importanti e ampiamente utilizzati. Ad esempio, HTML e XML sono esempi di file di testo. La maggior parte dei protocolli Internet importanti, come HTTP, segue le convenzioni dei file di testo e include specifiche per le terminazioni di riga.

Stampanti

La maggior parte delle stampanti diverse da quelle molto più economiche, rispettano ancora CR e LF. Infatti sono fondamentali per i linguaggi di descrizione della pagina più diffusi - PCL e Postscript.


In breve, era necessario per le stampanti, ma ora i sistemi operativi lo fanno in modo leggermente diverso. Nella maggior parte dei casi, va bene eseguire sia CR che LF utilizzando \r\n e nella maggior parte dei casi funzionerà correttamente.


Linux
  1. Come eseguire il dual-boot di Linux e Windows

  2. Come eseguire il dual boot di Kali Linux e Windows 10

  3. Come accedere ai filesystem Linux in Windows 10 e WSL 2

  4. Come installare Wine ed eseguire app di Windows in Linux

  5. Come eseguire il dual boot di Windows 10 e MX Linux

Come installare e utilizzare Sublime Text 4 in Linux

Come eseguire il dual boot di Linux Mint e Windows 10 [Guida per principianti]

Come eseguire il dual boot di Antergos Linux e Windows UEFI

Come condividere file di giochi Steam tra Linux e Windows

Come convertire un file .pem in un file .ppk su Windows e Linux

Come installare e configurare il sottosistema Windows per Linux