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

Bash While循环脚本echo输出异常原因咨询

问题原因及解决办法

你的脚本输出不符合预期,核心原因是文本文件的行尾带了Windows风格的回车符(\r)。

具体原理:

  1. 你的文件大概率是在Windows环境创建/编辑的,行尾是\r\n(CRLF),而Linux系统默认用\n(LF)作为换行符。
  2. read -r line读取行时,只会自动剔除换行符\n,但会保留\r。所以第一行的line变量实际是goce\r。
  3. 当执行echo "File: ${line}"时,\r会让终端光标跳回行首,后续输出的:直接覆盖了开头的File ,最终就显示成了goce:。

验证方式

用cat -v查看文件里的不可见字符:

cat -v /tmp/tmpGetFilefile-only

如果输出里第一行末尾有^M(这是\r的可视化标识),就坐实了这个问题。

解决办法

有三种常用方式:

  • 直接转换文件格式(需要dos2unix工具):
dos2unix /tmp/tmpGetFilefile-only
  • 用sed批量去掉行尾的\r:
sed -i 's/\r$//' /tmp/tmpGetFilefile-only
  • 在脚本里处理变量,读取后剔除\r:
#!/bin/bash
while read -r line
do
  line=${line%$'\r'}
  echo "File: ${line}"
done < /tmp/tmpGetFilefile-only

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:02:11