回答:
プレーンread
(またはread -r
この動作に影響を与えないその他のオプション)で行全体を読み取る場合、カーネルが提供する行エディターは、Backspace1文字を消去するためのキーと、その他のごく少数のコマンド(Return入力を終了することを含む)を認識しますラインに入れて送信します)。ショートカットキーはユーティリティで設定できstty
ます。端末は、その行エディターがアクティブであるとき、調理済みモードにあると言われます。rawモードでは、キーボードで入力された各文字がすぐにアプリケーションに送信されます。クックドモードでは、文字はバッファに格納され、完全な行のみがアプリケーションに送信されます。
を実装するために一定数の文字の後に読み取りを停止するにはread -n
、bashをrawモードに切り替える必要があります。rawモードでは、端末はBackspaceキーの処理を行わず(を押すBackspaceまでに、前の文字はすでにbashに送信されています)、bashも処理を行いません(おそらくこれにより柔軟性が向上するためです)。スクリプトが独自の処理を実行できるようにするため)。
オプション-e
を渡して、bash独自のラインエディターを有効にすることができます(カーネルの極端に粗雑なエディターとは異なり、適切なラインエディターであるreadline)。bashは行の編集を行っているため、要求された文字数になると読み取りを停止できます。
使用read -e
:
$ read -e -n 5
13acX
read -e
という意味です:
行を取得するには、Readline(コマンドライン編集を参照)を使用します。
これを行うと、バックスペースなどの通常のシェルプロンプトで書き込むときと同じように入力を編集できますHome。
read
組み込みのbashです。(参照type read
。)あなたがしてドキュメントを見つけることができますman bash
:
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
[...]
-e If the standard input is coming from a terminal, readline (see READLINE above) is used to obtain the line.
Readline uses the current (or default, if line editing was not previously active) editing settings.
またはあなたが使うことができますhelp read
:
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
-e use Readline to obtain the line in an interactive shell
-e
スイッチは、基本的にすべてのバックスペースの取り扱いを含め、シェルプロンプトで利用できますことができますreadlineのサポートを可能にします。
したがってread -en 5
、あなたがしたいことをする必要があります。
read
、「入力された文字数」を読み取る方法はまだ答えられていません。