bash一行输入,多行回显demo脚本

效果图:

脚本:

bash 复制代码
#!/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"
相关推荐
3GPP仿真实验室7 分钟前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon11 分钟前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity11 分钟前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
沐知全栈开发12 分钟前
CSS3 边框:全面解析与实战技巧
开发语言
island131422 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
曹牧26 分钟前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言
浅念-29 分钟前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
WeiXiao_Hyy30 分钟前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
User_芊芊君子35 分钟前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
Max_uuc1 小时前
【C++ 硬核】打破嵌入式 STL 禁忌:利用 std::pmr 在“栈”上运行 std::vector
开发语言·jvm·c++