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

Bash脚本中Echo输出首字符被问号替换问题排查求助

Bash脚本输出异常:开头字符被末尾问号覆盖的解决办法

问题原因

这种现象的核心原因是$action变量中混入了回车符(\r)。当Bash输出包含\r的字符串时,这个控制字符会把光标跳转至当前行的开头,后续输出的问号?就会覆盖掉行首的W,最终呈现出开头字母被替换的假象。

回车符一般来自Windows格式的输入文件、带Windows风格换行(\r\n)的用户输入,或者从Windows环境传递过来的变量值——而Bash默认处理的是Unix风格的换行(仅\n)。

解决办法

在使用$action变量前,先清除其中的回车符,以下是几种高效的处理方式:

  • 参数替换法(推荐,无需额外命令):

    action=${action//$'\r'/}
    
  • tr命令过滤法:

    action=$(echo "$action" | tr -d '\r')
    
  • 文件格式转换(如果action来自文件):
    用dos2unix工具将Windows格式文件转为Unix格式:

    dos2unix your_input_file.txt
    

修正后的脚本示例

假设原脚本逻辑如下,添加清除回车符的步骤后即可正常运行:

#!/bin/bash
while true; do
    read -p "Enter action: " action
    # 清除变量中的回车符
    action=${action//$'\r'/}
    # 正常输出提示语
    echo "What would you like to $action?"
    # 后续业务逻辑...
done

内容的提问来源于stack exchange,提问作者bananas0102

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:54:59