web-dev-qa-db-ja.com

LinuxとWindowsでは\ nと\ rの扱いが異なりますか?

\nは針を下に移動し、\rは針を行の先頭に移動すると思います(左揃え)?よくわかりません。だから、私が間違っているなら、私を訂正してください...

とにかく、WindowsとLinuxではnewlinescarriage returnsの扱いが異なると言われました。彼らの扱い方や覚えておくことが重要な場所について知りたいのですが。回答ありがとうございます。

22
千里ちゃん

\ nは針を下に移動し、\ rは針を行頭(左揃え)に移動すると思いますか?わからないけど

これは多かれ少なかれ本当ですが、主に歴史的な好奇心です。もともと、ラインフィード(LF)は、プリンターとハードコピー端末( teleprinters );で用紙を1行進めるために使用されていました。キャリッジリターン(CR)により、印字ヘッドが行の先頭に戻りました。

これはおそらく「テキストモード」で使用した場合でも最新のプリンターで機能しますが、それ以外の場合は今日ではあまり関係がありません。

とにかく、WindowsとLinuxでは改行と改行の扱いが異なると言われました。

違いは簡単です。OS設計者は、コンピュータファイルのテキストで新しい行の始まりを表す方法を選択する必要がありました。さまざまな歴史的理由により、Unix/Linuxの世界では、単一のLF=文字が改行マーカーとして選択されました。MS-DOSはCR + LFを選択し、Windowsはこれを継承しました。したがって、プラットフォームごとに異なる規則が使用されます。

実際には、これはますます問題になってきています。改行マーカーは実際には「プレーンテキスト」を処理するpogramにのみ関連し、それほど多くはありません-ほとんどの場合、プログラムのソースコード、構成ファイル、およびドキュメント付きの単純なテキストファイルにのみ影響します。現在、これらの種類のファイル(エディター、コンパイラーなど)を処理するほとんどのプログラムは、両方の改行規則を処理できるため、どちらを選択してもかまいません。

ツールが「その」改行規則を主張する場合があります(たとえば、UnixシェルスクリプトはCR + LFを使用してはいけません)。その場合は、正しいものを使用する必要があります。

21
sleske

CRおよびLF

American Standard Code for Information Interchange(ASCII)は、CARRIAGE-RETURN(CR)やLINE-FEED(LF)などの制御文字を定義しました。これは、プリンターの印刷位置を制御するために、初期のコンピュータープリンターに先行する機械式タイプライター。

プラットフォーム依存

Windowsでは、テキストファイルの従来の行区切り文字はCRの後にLFが続きます

古い(OSX以前)Apple Macintoshシステムでは、テキストファイルの従来の行区切りはCRでした

UnixおよびLinuxでは、テキストファイルの従来の行区切り文字はLFです。

\ nと\ r

多くのプログラミング言語とスクリプト言語では、_\n_は「改行」を意味します。場合によっては(ただし常にではありません)、これはASCII LINE-FEED文字(LF)を意味し、カーソル(または印刷位置)を1行下に移動します。プリンタまたはタイプライターでは、これにより実際には用紙が1行上に移動します。

常に_\r_はASCII CARRIAGE-RETURN文字(CR)を意味します。その名前は、紙を運ぶローラー(「キャリッジ」)の原因となったキャリッジリターンキーがあったメカニカルタイプライターに由来します。スプリングを動力源として、右に移動します。したがって、現在の入力位置を左マージンに設定します。

プログラミング

一部のプログラミング言語では、_\n_は、テキストファイル内の行を終了または分離するプラットフォーム依存の文字シーケンスを意味する場合があります。たとえば、Perlでは、_print "\n"_はLinuxとWindowsで異なる文字シーケンスを生成します。

Javaでは、ランタイムプラットフォームのネイティブの行末を使用する場合、_\n_または_\r_をまったく使用しないのが最善の方法です。 System.getProperty("line.separator")を使用する必要があります。プラットフォームに関係なくLFおよびCRを使用する場合は、_\n_および_\r_を使用する必要があります(たとえば、HTTP、FTP、およびその他のインターネット通信プロトコルで使用されます)。

Unix stty

Unixシェルでは、sttyコマンドを使用して、シェルにこれらのさまざまな規則を変換させることができます。たとえば、_stty -onlcr_を指定すると、シェルはその後すべての発信LFをCR LFに変換します。

LinuxおよびOSXはUnixの規則に従います

テキストファイル

テキストファイルは依然として非常に重要であり、広く使用されています。たとえば、HTMLとXMLはテキストファイルの例です。 HTTPなどの重要なインターネットプロトコルのほとんどは、テキストファイルの規則に従っており、行末の仕様が含まれています。

プリンター

最も安価なプリンタ以外のほとんどのプリンタは、CRとLFを尊重しています。実際、これらは最も広く使用されているページ記述言語(PCLとPostscript)の基本です。

15
RedGrittyBrick

要するに、プリンターにはが必要でしたが、今ではOSがそれをわずかに異なる方法で実行します。ほとんどの場合、CRとLFを実行して\r\nそして、ほとんどの場合、これは正常に動作します。

5

Linuxは\ rを無視しません。それが何をするか考えてください。キャリッジリターンは複数回実行できますが、最終的には同じ場所、つまり行頭に到達します。

2
Ke6pij