バックスペースでは、「bash read -e」はprintf(既存)テキストの同じ行も削除します。

バックスペースでは、「bash read -e」はprintf(既存)テキストの同じ行も削除します。

私は使用しますprintf "input: "; read -e。何かを入力してを押しますBackspace。最後の文字に達すると、input:その文字と一緒にセクションが削除されます。Backspace以前に何も入力していないか、使いやすい場合read(Readlineなし)、誤動作は表示されません。

答え1

readin はbash組み込みコマンドです。ライブラリを介してフルスクリーン編集をread -e使用します(たとえば、前の行に戻る方法、入力したテキストでカーソルを左右に移動する方法などを知っています)。カーソルアドレス指定コードを使用して画面出力を最適化できます。bashreadline

ただし、入力を削除するときにカーソルが行の先頭にあると予想し、時には行全体を消去する方が個々の文字を削除するよりも高速です。これはプロンプトを台無しにし、カーソルを右に移動しますが、bashはそれを知りません。

プロンプトでターミナルエスケープを使用すると(色設定やターミナルタイトル設定など)、同じことが発生します。これには、bashカーソルを移動しないバイトを表す特別なエスケープがあります。

これを行うには、特別に設計されたプロンプトオプションをread -p 'input: ' -e使用する必要があります。-p

答え2

Aはread -ereadlineライブラリを呼び出します。readプレーンテキストにはない複数の編集ツールにアクセスできます。しかし、「空行」があるとします。

これを解決する方法は、「空行」の仮定を避けるために空白のようなものを提供することです。

printf 'input:'; read -e -p ' '

ただし、そのオプションがすでに使用されているので、次のように-p書くのがより簡単になります。

read -e -p 'input: '

関連情報