Bash在退格鍵上,
在退格鍵上,bash read -e
也會刪除同一行 printf(預先存在的)文本
我用
printf "input: "; read -e
. 我輸入一些東西,然後按Backspace
。當到達最後一個字元時,這將刪除input:
與其一起的部分。Backspace
如果我之前沒有輸入任何內容或者我使用簡單read
(沒有 Readline),則不會出現異常行為。
A
read -e
呼叫 readline 庫。這可以訪問普通read
沒有的幾種編輯工具。但是,它假定為“空行”。解決此問題的方法是提供一些內容(例如空格)以避免“空行”假設:
printf 'input:'; read -e -p ' '
但由於已經使用了該
-p
選項,因此編寫起來可能更簡單:read -e -p 'input: '
read
inbash
是一個內置命令。read -e
使用bash
通過庫的全屏編輯readline
(即它了解如何返回上一行,在輸入的文本中左右移動游標等)。它可以使用游標定址程式碼來優化螢幕的輸出。但是,它希望游標在開始時位於行首,有時在刪除輸入時清除整行比刪除單個字元更快。這就是弄亂您的提示的原因,它將游標向右移動,而 bash 卻不知道它。
在提示符中使用終端轉義時也會發生同樣的事情(例如設置顏色或設置終端標題)。為此目的
bash
,有特殊的轉義來指示哪些字節不移動游標。您應該使用
read -p 'input: ' -e
,-p
提示選項是為此專門設計的。