次のようなものを出力しているLinux固有のコードを見ています:
\r\x1b[J>
stdio へ。
現在の行から画面の内容を削除することを表していることは理解して<ESC>[J
いますが、ここで \r は何をしますか?
次のことも見ています。
>user_input\n\r>
user_input は、ユーザーが入力したテキストです。しかし、ここで \r の目的は何ですか?
文字'\r'
はキャリッジリターンです。カーソルを行頭に戻します。
多くの場合、改行 ( ) と組み合わせてインターネット プロトコルで使用され'\n'
、行の終わりを示します (ほとんどの標準では として指定されてい"\r\n"
ますが、間違った方法を許可するものもあります)。Windows では、キャリッジ リターンと改行のペアも行末として使用されます。古い Macintosh オペレーティング システム (OSX より前) では、行末として改行の代わりに単一のキャリッジ リターンが使用されていましたが、UNIX および UNIX 系システム (Linux や OSX など) では単一の改行が使用されていました。
制御文字\r
は、キャレット (別名テキスト カーソル) を現在の行の一番左の位置に移動します。
ウィキペディアより
ASCII または互換性のある文字セットに基づくシステムでは、LF (ライン フィード、'\n'、0x0A、10 進数で 10) または CR (キャリッジ リターン、'\r'、0x0D、10 進数で 13) を個別に使用するか、CR の後にLF (CR+LF、'\r\n'、0x0D0A)。これらの文字は、プリンタ コマンドに基づいています。ライン フィードは、1 行の用紙をプリンタから送り出す必要があることを示し、したがってプリンタに用紙を 1 行進めるように指示し、キャリッジ リターンは、プリンタのキャリッジを先頭に戻す必要があることを示しました。現在の行。バージョン 4 より前の QNX などの一部のまれなシステムでは、改行文字として ASCII RS (レコード区切り文字、0x1E、10 進数で 30) 文字を使用していました。
FWIW-これはキャリッジ制御の一部です-メインフレーム制御ワードからWindows/UNIX/FORTRANキャリッジ制御まで。キャリッジ制御は、FORTRANのように言語レベルで実装することも、UNIXやWindowsのようにシステム全体で実装することもできます。
\n
初期のPDPユーザー「インターフェース」(tty端末)の制限から生じました。見たいなら美術館に行ってください。
非常に簡単なポイント:\ n\rの違いは上で説明されています。しかし、これらの説明はすべて、キャリッジ制御が実装に依存していることを実際に示しています。
これ[J
はANSIエスケープシーケンスの一部であり、「標準準拠のtty端末」で実行されます。DOSは、ANSI.SYSを使用して、これらのシーケンスを使用して色、下線、太字を提供していました。
http://ascii-table.com/ansi-escape-sequences.php
質問の良い参考資料です:what does some odd looking string in the output do?
\r
キャリッジリターンです。\n
改行も同様です。