You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:00:01