如何让Bash脚本中的read函数不输出换行符?
在Bash中使用read -e时禁止输出换行符
你使用stty -echonl无效的核心原因是:read -e启用了readline库,它会在用户按下回车时自动输出换行,直接覆盖了stty的配置。
以下是两种可行的解决方案:
方案1:保留read -e的编辑功能,抵消换行效果
这个方法既保留了read -e的命令行编辑能力(比如方向键修改输入),又能消除回车后的换行:
#!/bin/bash # 保存终端原始设置,避免影响后续操作 old_stty=$(stty -g) # 关闭终端回显换行 stty -echonl # 读取输入(支持命令行编辑) read -e entered # 将光标移回当前行开头,抵消readline输出的换行 printf "\r" # 恢复终端原始设置 stty "$old_stty"
方案2:去掉read -e参数,直接生效stty设置
如果不需要命令行编辑功能,直接去掉-e参数,stty -echonl就能正常工作:
#!/bin/bash stty -echonl read entered
内容的提问来源于stack exchange,提问作者Sergey Belenkov
相关产品推荐
相关产品推荐

