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
相关产品推荐
相关产品推荐

