Bash中read命令加-e参数后退格会清空整行,如何避免该问题?
问题根因
read -e启用了readline库处理输入逻辑,readline仅会识别自身输出的提示文本,你提前通过echo输出的Last Name: 内容对readline无感知,它会将调用read时的光标位置判定为输入行的起始边界,退格操作会按这个错误边界清空整行,连带右侧固定的First Name内容也会被清除。
修复方案
将姓氏输入的提示文本交给read的-p参数输出,让readline可以正确识别提示与输入内容的边界,退格时仅会删除用户实际输入的字符,不会影响已有的提示和右侧固定内容。
修复后的代码:
#!/bin/bash clear # 先渲染右侧固定的First Name内容 tput cup 0 25 echo -n "First Name: JOHN" # 移动光标到行首,通过read自带参数输出提示,无需额外echo tput cup 0 0 read -e -n10 -p "Last Name: " lastname
可选优化
如果需要保留已有的lastname作为输入默认值,可新增-i参数(要求Bash版本≥4.0):
read -e -n10 -p "Last Name: " -i "$lastname" lastname
进入输入状态后会直接显示已有默认值,退格修改同样不会触发整行清空问题。
内容的提问来源于stack exchange,提问作者ordinary_guy
相关产品推荐
相关产品推荐

