在退格键上,`bash read -e` 也会删除同一行的 printf(预先存在的)文本

gla*_*rry 1 bash shell-script readline read

我用printf "input: "; read -e. 我输入一些东西,然后按Backspace。当到达最后一个字符时,这将删除该input:部分。Backspace如果我之前没有输入任何内容或者我使用了简单的read(没有 Readline),就不会行为不端。

wur*_*tel 5

readinbash是一个内置命令。通过库read -e使用bash全屏编辑readline(即它了解如何返回上一行,在输入的文本中左右移动光标等)。它可以使用光标寻址代码来优化到屏幕的输出。

然而,它期望光标在开始时位于行的开头,有时在删除输入时清除整行比删除单个字符更快。这就是搞乱你的提示的原因,它会在 bash 不知道的情况下将光标向右移动。

在提示中使用终端转义(例如设置颜色或设置终端标题)时,可能会发生同样的事情。为此目的,bash有特殊的转义符来指示哪些字节不会移动光标。

您应该使用read -p 'input: ' -e-p提示选项是专门为此而设计的。