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

Bash脚本读取外部文件变量后echo输出异常,求助原因分析

Bash脚本source文件后echo输出异常问题解析

问题场景

你有一个内容如下的源文件:

fname=john
lname=wick

编写Bash脚本读取该文件并输出变量:

#!/bin/bash

source /home/john/automation/sourcefile

echo "Name is ${fname} ${lname}"

但执行脚本后得到异常输出:

wickis john

原因分析

出现这种问题的核心原因是源文件使用了Windows风格的换行符\r(Linux/Unix系统默认使用\n作为换行符)。

当Bash执行source命令加载文件时,会把lname=wick\r整行作为变量定义处理,导致lname的实际值是wick\r。其中\r是回车控制字符,它的作用是将输出光标移到当前行的开头位置。

当执行echo "Name is ${fname} ${lname}"时,实际输出的内容是Name is john wick\r:

  1. 先输出Name is john wick
  2. 遇到\r,光标跳转到行首
  3. 已经输出的Name is 会被后续内容覆盖,最终呈现出wickis john的异常结果。

解决办法

只需将源文件转换为Linux/Unix风格的换行符即可,常用方法如下:

  • 使用dos2unix工具转换:
    dos2unix /home/john/automation/sourcefile
    
  • 用sed命令去除行尾的\r:
    sed -i 's/\r$//' /home/john/automation/sourcefile
    
  • 通过Vim编辑器修改:打开文件后执行:set fileformat=unix,再保存退出(:wq)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:04:50