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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:10:51