コンピュータ科学において、エスケープシーケンスとは、シーケンスの残りのテキスト構文に加えて、エスケープ文字のプレフィックスを指定する確立された規則に基づく特別な意味を持つ文字シーケンスです。[1] [2] 規則では、任意の文字コードをシーケンスプレフィックスとして定義できます。規則によっては、バックスラッシュ (\) やアンパサンド (&) などの通常の印刷可能な文字が使用されます。また、 ASCIIエスケープなどの印刷できない(制御)文字を使用する規則もあります。
エスケープシーケンスの歴史は少なくとも1874年のBaudotコードにまで遡ります。[3] [4] [5]
エスケープシーケンスの一般的な用途は、データストリームから制御文字を削除し、誤って制御機能を起動しないようにすることです。制御文字は、エスケープ文字と1つ以上の後続文字に置き換えられます。制御文字がアクションを起動する通常のコンテキストからエスケープした後、シーケンスは削除された文字に置き換えられます。[6]エスケープ文字自体を送信するには、2つのコピーを送信します。[7]
エスケープシーケンスは、文字リテラルや文字列リテラルにおいて、印字できない文字や文字・文字列の構文と衝突する文字をエンコードするためによく使用されます。例えば、制御文字はソースファイルでは使用できない場合があります。また、コマンドに入力すると望ましくない副作用が生じる可能性があります。
C言語や多くの派生プログラミング言語では、文字列リテラル内のバックスラッシュ(\)はエスケープシーケンスの開始を示します。[8] [9]一般的なエスケープシーケンスには、キャリッジリターン、改行、タブなどがあります。印字可能文字をエスケープに使用すると文字の通常の意味が失われることを考慮して、2つのバックスラッシュ文字のシーケンス()は1つのバックスラッシュをエンコードします。エスケープシーケンスは、文字をコード値で指定することもできます。たとえば、バックスラッシュは または としてエンコードでき、それぞれ16進数と8進数で文字コード値を指定します。
\r \n \t\\\x5c\134
バックスラッシュの直後に改行文字(文字列リテラルの外側にある必要がある)が続く場合、エスケープシーケンスとはみなされません。Cプリプロセッサは、その行を後続の行と結合します。[10]
文字列リテラル内でエスケープ文字が必要な場合、一般的な戦略は 2 つあります。
'He didn''t do it.') [7]echo Cut^&Paste、アンパサンド演算子をキャレット(^)でエスケープすることで「Cut&Paste」を出力します[6]C言語や多くの関連言語では、エスケープ文字はバックスラッシュ(\)です。一重引用符は無効である'\''ため、 と記述できます。文字列リテラルは二重引用符( )で区切られるため、二重引用符をエスケープ( )するか、二重引用符のコードを指定するシーケンス( )を使用しない限り、文字列に二重引用符を含めることはできません。
'''""\""\x22
print "ナンシーは群衆に向かって「 Hello World ! 」と言いました。"
これは、エスケープのためにバックスラッシュを挿入することで修正できます。
print "ナンシーは群衆に向かって「Hello World!」と言いました。"
あるいは、次の例では、後続の 2 文字が 16 進数であることを示すために「\x」が使用されています。「22」は二重引用符の 16 進 ASCII 値です。
print "ナンシーは群衆に向かって「Hello World!」と言いました。"
C、C++、Java、Rubyでは、同じ2種類のバックスラッシュエスケープスタイルが使用できます。PostScriptとリッチテキスト形式(RTF)でもバックスラッシュエスケープが使用されます。quoted -printableエンコードでは、等号がエスケープ文字として使用されます。URLとURIでは、非ASCII文字と同様に、特別な意味を持つ文字を引用符で囲むために パーセントエンコードが使用されます。
VT52端末は、escape-Aのような単純な二重音字コマンドを使用していました。エスケープ文字のプレフィックスがない場合、A単に文字 を意味しますAが、エスケープシーケンス の一部として使用escape-Aされると、異なる意味を持ちます。VT52はパラメータもサポートしていました。これは、置換としてエンコードされた単純な制御言語ではありませんでした。
後期型のVT100端末は、カーソル移動、文字セット、表示の拡張といった機能の制御に、より洗練されたANSIエスケープシーケンス規格(現在のECMA-48)を実装しました。HP 2640シリーズは、ブロックモードと文字モード、プログラミングキーとそのソフトラベル、グラフィックスベクター、さらにはテープやディスクファイルへのデータ保存といった機能において、おそらく最も精巧なエスケープシーケンスを備えていました。
Windows(およびMS-DOS )では、 ANSI.SYSユーティリティ[11]を使用してANSIエスケープシーケンスのサポートを有効にすることができます。DOSではPROMPT$eコマンドを介して、16ビットWindowsではコマンドウィンドウを介して有効になります。UnixおよびUnix系システムでは、 ANSIエスケープシーケンスは一般的にシェルによってサポートされています。GUIアプリケーションの台頭によりエスケープシーケンスの使用は減少しましたが、それでもフルスクリーンのテキストベースのアプリケーションを提供する機能は依然として利用可能です。
制御シーケンスとは、文字が表す通常の情報を伝達するのではなく、コンピュータ周辺機器の状態を変更する文字シーケンスです。ANSIエスケープシーケンスでは、制御シーケンスイントロデューサと呼ばれるエスケープシーケンスプレフィックスは、ASCII ESC(10進数で27)に続くか、CSI(10進数で155)のいずれかになります。制御シーケンスにエスケープ文字を使用しなかった著名なシステムには、以下のものがあります。
[
+++つまりコマンドモードからオンラインモードへの切り替えを定義します。シーケンスがコンテンツに埋め込まれるのではなく制御シーケンスとして解釈されるようにするため、送信側は送信の前後1秒間通信を停止します+++。モデムが状態を検出すると、通常モード(電話機に文字を送信するモード)からコマンドモードに切り替わり、データがコマンドとして解釈されます。Oコマンドを送信すると、通常モードに戻ります。[12] [13] [14] [15]通信におけるエスケープシーケンスは、コンピュータと周辺機器が情報を送受信するためのチャネルが1つしかない場合によく使用されます(したがって、エスケープシーケンスは帯域内シグナリングの一例です)。[19] [20]ほとんどのダム端末が通信に7データビットのASCIIを使用していた時代にはエスケープシーケンスが一般的で、7データビットで利用可能な128コードに制限されていた「外国語」文字やグラフィック文字を別の文字セットに切り替えるために使用されることもありました。比較的「ダム」な端末でさえ、いくつかのエスケープシーケンスに応答しました。例えば、初期の機械式テレタイププリンター(「ガラステレタイプ」またはVDUのベース)は、文字モードと数字モードを切り替えるために27文字目と31文字目に応答しました。
多くのコンピュータキーボードにはEscキー(Escはescapeの略)が搭載されていますが、通常はエスケープシーケンスの入力には使用されません。viテキストエディタでは、入力モードを終了するためにこのキーを使用します。[21]一部のアプリケーションでは、操作をキャンセルしたり、ネストされたコンテキストを1つ上のレベルに移動したりするためにこのキーを使用します。[22]
1870年にJ. Baudotによって発明され、1874年に特許を取得したBaudotコードは[…]
制御文字の要素C0とC1 […] 1874年にジャン=モーリス=エミール・ボード(1845-1903)が特許を取得した5ビットコード
フィールド内で連続する2つのアポストロフィは […]
バックスラッシュ
の後に文字または数字の組み合わせが続く文字の組み合わせは、
エスケープシーケンス
と呼ばれます。
\
翻訳フェーズ、2.:バックスラッシュ文字(
)の直後に改行文字が続く場合は、そのインスタンスを削除し、物理ソース行を連結して論理ソース行を形成します。[...]
\
+++ - 「エスケープシーケンス」 - このコマンドは、モデムをオンラインコマンドモードに戻すためのエスケープシーケンスを開始します。
モデムがコマンドモードの場合、モデムはユーザーからのコマンドを受け付けます。
viコマンド […] Esc(エスケープ)キーを押すと[…]