我用printf "input: "; read -e
. 我输入一些东西,然后按Backspace
。当到达最后一个字符时,这将删除input:
与其一起的部分。Backspace
如果我之前没有输入任何内容或者我使用简单read
(没有 Readline),则不会出现异常行为。
我用printf "input: "; read -e
. 我输入一些东西,然后按Backspace
。当到达最后一个字符时,这将删除input:
与其一起的部分。Backspace
如果我之前没有输入任何内容或者我使用简单read
(没有 Readline),则不会出现异常行为。
read
inbash
是一个内置命令。read -e
使用bash
通过库的全屏编辑readline
(即它了解如何返回上一行,在输入的文本中左右移动光标等)。它可以使用光标寻址代码来优化屏幕的输出。但是,它希望光标在开始时位于行首,有时在删除输入时清除整行比删除单个字符更快。这就是弄乱您的提示的原因,它将光标向右移动,而 bash 却不知道它。
在提示符中使用终端转义时也会发生同样的事情(例如设置颜色或设置终端标题)。为此目的
bash
,有特殊的转义来指示哪些字节不移动光标。您应该使用
read -p 'input: ' -e
,-p
提示选项是为此专门设计的。A
read -e
调用 readline 库。这可以访问普通read
没有的几种编辑工具。但是,它假定为“空行”。解决此问题的方法是提供一些内容(例如空格)以避免“空行”假设:
但由于已经使用了该
-p
选项,因此编写起来可能更简单: