GNU/Linux >> Znalost Linux >  >> Linux

Jak se liší \n a \r na Linuxu a Windows?

Myslím, že \n posune jehlu dolů a \r posune jehlu na začátek řádku (zarovnání doleva)? Nejsem si však jistý

To je víceméně pravda, ale hlavně historická kuriozita. Původně se linefeed (LF) používal k posunu papíru o jeden řádek na tiskárnách a tištěných terminálech (dálnopisech); návrat vozíku (CR) vrátil tiskovou hlavu na začátek řádku.

To pravděpodobně stále funguje na moderních tiskárnách při použití v "textovém režimu", ale jinak je to dnes málo relevantní.

Každopádně mi bylo řečeno, že Windows a Linux zpracovávají nové řádky a návraty vozíků jinak.

Rozdíl je jednoduše:návrháři OS si museli vybrat, jak znázornit začátek nového řádku v textu v počítačových souborech. Z různých historických důvodů byl v Unix/linuxovém světě zvolen jako znak nového řádku jeden znak LF; MS-DOS zvolil CR+LF a Windows to zdědil. Různé platformy tedy používají různé konvence.

V praxi je to čím dál menší problém. Značka nového řádku je relevantní pouze pro programy, které zpracovávají "prostý text", a není jich tolik - většinou se týká pouze zdrojového kódu programu, konfiguračních souborů a některých jednoduchých textových souborů s dokumentací. V současné době většina programů zpracovávajících tyto druhy souborů (editory, kompilátory atd.) dokáže zpracovat obě konvence nového řádku, takže nezáleží na tom, kterou si vyberete.

Existují některé případy, kdy nástroje trvají na „své“ konvenci nového řádku (např. unixové shellové skripty nesmí používat CR+LF), v takovém případě musíte použít ten správný.


CR a LF

Americký standardní kód pro výměnu informací (ASCII) definoval řídicí znaky včetně CARRIAGE-RETURN (CR) a LINE-FEED (LF), které byly (a stále jsou) používány k řízení pozice tisku na tiskárnách způsobem analogickým mechanické psací stroje, které předcházely raným počítačovým tiskárnám.

Závislost na platformě

Ve Windows je tradičním oddělovačem řádků v textových souborech CR následovaný LF

Ve starých (před OSX) systémech Apple Macintosh byl tradičním oddělovačem řádků v textových souborech CR

V Unixu a Linuxu je tradičním oddělovačem řádků v textových souborech LF.

\n a \r

V mnoha programovacích a skriptovacích jazycích \n znamená "nový řádek". Někdy (ale ne vždy) to znamená znak ASCII LINE-FEED (LF), který, jak říkáte, posune kurzor (nebo pozici tisku) o jeden řádek dolů. V tiskárně nebo psacím stroji by to ve skutečnosti posunulo papír o jeden řádek nahoru.

Vždy \r znamená znak ASCII CARRIAGE-RETURN (CR), jehož jméno ve skutečnosti pochází z mechanických psacích strojů, kde byl klíč pro návrat vozíku, který způsobil, že se válec ("vozík"), který nesl papír, pohyboval doprava, poháněný pružinou, jako tak daleko, jak by to šlo. Tím nastavíte aktuální pozici psaní na levý okraj.

Programování

V některých programovacích jazycích \n může znamenat platformu závislou sekvenci znaků, které končí nebo oddělují řádky v textovém souboru. Například v Perlu print "\n" vytváří na Linuxu jinou sekvenci znaků než na Windows.

V Javě je nejlepší praxe, pokud chcete používat nativní zakončení řádků pro běhovou platformu, nepoužívat \n nebo \r vůbec. Měli byste použít System.getProperty("line.separator") . Měli byste použít \n a \r kde chcete LF a CR bez ohledu na platformu (např. jak se používá v HTTP, FTP a dalších internetových komunikačních protokolech).

Unix stty

V unixovém shellu stty příkaz lze použít k tomu, aby shell překládal mezi těmito různými konvencemi. Například stty -onlcr způsobí, že shell následně přeloží všechny odchozí LF na CR LF.

Linux a OSX dodržují unixové konvence

Textové soubory

Textové soubory jsou stále nesmírně důležité a široce používané. Například HTML a XML jsou příklady textového souboru. Většina důležitých internetových protokolů, jako je HTTP, dodržuje konvence textových souborů a obsahuje specifikace pro zakončení řádků.

Tiskárny

Většina tiskáren kromě těch úplně nejlevnějších stále respektuje CR a LF. Ve skutečnosti jsou základem nejrozšířenějších jazyků pro popis stránek - PCL a Postscript.


Zkrátka to bylo potřeba pro tiskárny, ale teď to OS dělají trochu jinak. Ve většině případů je v pořádku provést CR i LF pomocí \r\n a ve většině případů to bude fungovat dobře.


Linux
  1. Jak získat přístup k souborovým systémům Linux ve Windows 10 a WSL 2

  2. Jak nainstalovat Wine a spouštět aplikace pro Windows v Linuxu

  3. Jak duální bootování Windows 10 a MX Linux

  1. Jak duální bootování Linuxu a Windows

  2. Jak duální boot Kali Linux a Windows 10

  3. Jak vytvořit TeamSpeak Server na Linuxu, Windows a macOS

  1. Jak upravit soubor Hosts v systémech Linux, Windows a macOS

  2. Jak porovnávat a slučovat textové soubory na Linuxu

  3. Jak porovnat a sloučit textové soubory v Linuxu (část 2)