読むときにバックスペースを処理する方法は?

読むときにバックスペースを処理する方法は?

入力のバックスペースキーをどのように処理しますか? 5つの文字がすでに完了しているので(実際に入力された文字が1つもないにもかかわらず)、プロンプトに戻ると、奇妙に試みられたかどうか、および^?文字のread計算方法が表示されます。 。助けてください!12^?312^?3^?

-bash-3.2$ read -n 5
12^?3^?-bash-3.2$

ベストアンサー1

read通常(またはこの動作に影響を与えない他のオプション)を使用して行全体を読み取ると、read -rカーネル提供の行エディタは、あるBackspace文字と他の文字を消去するキーを認識します。注文するReturn入力ラインの完成と転送を含む)ショートカットは次のとおりです。設定そしてstty便利です。ラインエディタが有効になると、ターミナルがベーキングモードにあると言われます。生モードでは、キーボードに入力されたすべての文字がすぐにアプリケーションに送信されます。ベーキングモードでは、文字がバッファに保存され、完全な行だけがアプリケーションに送信されます。

実装する文字数が固定されてから読み取りを停止するには、read -nbashはrawモードに切り替える必要があります。 rawモードでは、ターミナルはキーを押しても何もしませんBackspace(キーを押すとBackspace前の文字がすでにbashに送信されます)、bashも何もしません(おそらくこれはより柔軟性があるからです)。自己処理)。

-ebashの独自のラインエディタ(カーネルの非常に粗雑なラインエディタではなく適切なラインエディタであるreadline)を有効にするオプションを渡すことができます。 Bashは行編集を実行するため、要求された文字数に達すると読み取りを停止します。

おすすめ記事