效果图:

脚本:
- #!/bin/bash
- # 定义一个变量,用来存储输入的内容
- input=""
- # 定义一个变量,用来存储输入的字符
- char=""
-
- # 为了让read能读到空格键
- IFS_store=$IFS
- IFS=''
-
- # 提示内容,在while循环中也有,如果要修改,需要一并修改
- echo "回显:"
- echo -n "请输入:"
-
- # 定义一个循环,直到输入回车键为止
- while true; do
- # 读取一个字符,不显示在屏幕上
- read -s -n 1 char
-
- # 判断是否是回车键
- case $char in
- "")
- break
- ;;
- *)
- true
- ;;
- esac
-
- # 判断是否是退格键
- if [ "$char" == $'\b' ]; then
- if [ ${#input} -eq 0 ];then
- continue
- fi
- # 删除最后一个字符
- input=${input:0:-1}
- # 在第二行显示删除后的内容,并清除多余的字符
- echo -en "\r\033[K请输入:$input"
- # 回到第一行,并清除多余的字符
- echo -en "\r\033[1A\033[K"
- # 在第一行显示删除后的内容,并换行到第二行
- echo -e "回显:$input\r"
- else
- # 将输入的字符拼接到变量中
- input="$input$char"
- # 在第二行显示拼接后的内容,并清除多余的字符
- echo -en "\r\033[K请输入:$input"
- # 回到第一行,并清除多余的字符
- echo -en "\r\033[1A\033[K"
- # 在第一行显示拼接后的内容,并换行到第二行
- echo -e "回显:$input\r"
- fi
-
- # 在显示输入内容后,让光标向右移动输入内容的长度,这样就可以让光标停在第二行的最后一个字符处
- # +8是因为第二行有“请输入:”这几个字,需要额外增加长度
- echo -en "\033[$((${#input} + 8))C"
- done
-
- # 恢复IFS变量
- IFS=$IFS_store
-
- # 在第三行显示最终的结果,并清除多余的字符
- echo -e "\r\n\033[2B\033[K最终输入内容: $input"