回答:
キーボードの一部のキーは、実際の文字に対応していません。たとえば、Aは文字に対応しますa
が、UpおよびF1キーには独自の専用文字はありません。これらの特殊キーが押されると、端末はそのキーに対応する単一の文字を取得する代わりに、キープレスを、通常はエスケープ文字(通常はとして表示される^[
)で始まる複数の文字の特殊なシーケンスに変換します。たとえば、Up通常はシーケンスを生成します^[[A
(1つのキーから3文字です:エスケープ、、[
およびA
)。
通常表示されない理由^[[A
は、ほとんどのコンソールアプリケーションが、特別なシーケンスをコンソールにエコーするだけでなく、便利なコマンドに変換できるほどスマートであるためです。これを行うには、ターミナルの組み込みエコーをオフにし、独自の低レベル処理を行います。たとえば、をbash
見ると^[[A
、ユーザーが押したことを意味しUp、エコー^[[A
バックするのではなく、これまでに入力したものをすべて削除し、履歴に保存されている前のコマンドをフェッチして、代わりに印刷することを意味します。
^[[A
を押したときに表示される場合Upは、通常、ターミナルエコーがオンになっていて、フォアグラウンドプロセス(ターミナルを制御しているプロセス)が上記の特別な処理を実行していないことを意味します。これは、アプリケーションが(ほとんどの非対話型コマンドのように)単に端末を無視するためである可能性があります。通常、シェルは端末を標準モードにして、フォアグラウンドプロセスを実行する前にエコーをオンにし、コマンドの終了後に端末の制御を取り戻すと、独自の設定を復元します。
エコーはかなり無害のようです。実行中のコマンドが端末から読み取らない場合は、キーボードを介して生成した文字がbash
の入力キューに入る可能性があるので、bash
読み取りを再開すると通常のコマンドとして解釈されるため、入力する文字に注意してください。ターミナルから。
¹これは実際には単純化しすぎです。特定のシーケンスは端末タイプによって異なる可能性があるため、通常、コンソールアプリケーションと端末自体の間に抽象化ライブラリの複数の層があります。たとえばbash
、readline
ライブラリを使用してほとんどの入力を行います。