如何在Shell脚本中检测退格键并删除最后一个字符?
在Mac Shell脚本中处理退格键删除最后一个字符
原脚本仅实现了字符累加逻辑,未处理退格(删除)键。Mac上退格键通常对应两种ASCII码:127(DEL)或8(BS,即^H),以下是修改后的脚本,可实现按下删除键时删除最后一个输入字符:
INPUT='' while true do IFS= read -rsn1 char # 获取字符的ASCII编码 char_ascii=$(printf "%d" "'$char") # 判断是否为退格键 if [[ $char_ascii -eq 127 || $char_ascii -eq 8 ]]; then # 输入不为空时,截断最后一个字符 [[ -n "$INPUT" ]] && INPUT="${INPUT%?}" else # 普通字符追加到输入串 INPUT="$INPUT$char" fi # 同一行更新显示当前输入(避免重复输出) echo -ne "\r$INPUT" done
关键逻辑说明
printf "%d" "'$char":将输入字符转换为ASCII码,用于识别退格键${INPUT%?}:Shell参数扩展语法,删除字符串的最后一个字符echo -ne "\r$INPUT":-n不输出换行,-e启用转义,\r让光标回到行首,实现同一行更新输入内容,避免屏幕被重复输出占满
内容的提问来源于stack exchange,提问作者Mohit Jain
相关产品推荐
相关产品推荐

