キャレット角括弧角括弧A ^ [[A-どういう意味ですか?


13

これは既に質問されている場合は申し訳ありませんが、自分でこれを見つける方法はわかりません。検索エンジンで「^ [[A」を検索すると、「^ [[」部分は完全に無視されます。

とにかく、私の質問:ターミナル(Mac)で矢印キーを押すと、文字「^ [[A」、「^ [[B」、「^ [[C」または「^ [[D」が表示されることがあります。DOSを使用しているときに(おそらく)DOSを使用したときに、この数年前に出会ったことを覚えているようです。

なぜこれが起こり、それらはどういう意味ですか?

回答:


20

これらはANSIエスケープコードです。^[ESC(エスケープ)文字を表し、次は、[実際の左括弧であり、文字は、エスケープコードの機能を示します。Esc[一部はCSI(制御シーケンスイントロデューサ)と呼ばれています。したがって、シーケンスとCSI Aは、上矢印、またはCUU(CUrsor Up)を意味します。

とにかく、この方式はVT100ディスプレイ端末(1978年に導入された)の時代までさかのぼります。VT100で使用されるエスケープシーケンスの一部は、1980年代初期にANSIによって標準化され、それ以来一般的に使用され続けています。

通常、矢印キーを押すと、一部のプログラム(シェルなど)がリッスンしており、それらに基づいて動作できます。したがって、上矢印を押すと、コマンド履歴がスクロールして戻ります。ただし、矢印キーのエスケープシーケンスを理解しないプログラムが実行されている場合、通常は、ヒットする他のキーと同じように端末にエコーバックされます。そのため^[[A、上矢印キーを押すと時々表示されます。


^は、ターミナルで「制御」を表示するための一般的なUNIXの規則であることも指摘しておく価値があります。たとえば、Ctrl + Aを押して、同じ方法で無視すると、「^ A」と表示されます。Ctrl + [は、実際にはエスケープ文字の同義語です。ちなみに、そもそもこれが起こるのは何ですか?キャレットの印刷を決定するソフトウェアはどれですか?それは端末エミュレーターそのものですか、それとも私が知らない何かですか?
ミューザー

@Muzerカーネル自体がエコー文字のキャレット形式化を行います。この機能を無効にするにはstty -echoctl

カーネル?おもしろいことに、それがそんなに深くなることは知りませんでした(後から見れば、それは起動のごく初期の段階でさえ発生するので、明らかだったはずです!)。
ミューザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.