Bash

在退格鍵上,bash read -e 也會刪除同一行 printf(預先存在的)文本

  • January 19, 2019

我用printf "input: "; read -e. 我輸入一些東西,然後按Backspace。當到達最後一個字元時,這將刪除input:與其一起的部分。Backspace如果我之前沒有輸入任何內容或者我使用簡單read(沒有 Readline),則不會出現異常行為。

Aread -e呼叫 readline 庫。這可以訪問普通read沒有的幾種編輯工具。但是,它假定為“空行”。

解決此問題的方法是提供一些內容(例如空格)以避免“空行”假設:

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

但由於已經使用了該-p選項,因此編寫起來可能更簡單:

read -e -p 'input: '

readinbash是一個內置命令。read -e使用bash通過庫的全屏編輯readline(即它了解如何返回上一行,在輸入的文本中左右移動游標等)。它可以使用游標定址程式碼來優化螢幕的輸出。

但是,它希望游標在開始時位於行首,有時在刪除輸入時清除整行比刪除單個字元更快。這就是弄亂您的提示的原因,它將游標向右移動,而 bash 卻不知道它。

在提示符中使用終端轉義時也會發生同樣的事情(例如設置顏色或設置終端標題)。為此目的bash,有特殊的轉義來指示哪些字節不移動游標。

您應該使用read -p 'input: ' -e-p提示選項是為此專門設計的。

引用自:https://unix.stackexchange.com/questions/421167