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

source导入的变量输出异常原因及解决方法求助

问题原因与解决办法

原因分析

问题出在foo.config文件的换行符格式上:该文件使用了Windows风格的CRLF换行符(\r\n),而非Linux/Unix系统默认的LF换行符(\n)。

当通过source加载配置文件时,变量mypath的实际值会带上末尾的回车符\r,变成"/home/my/path"\r。执行echo "${mypath}ABC"时,\r会触发终端光标跳转到当前行开头,后续输出的ABC会覆盖掉/home/my/path的前3个字符,最终出现ABCme/my/path的异常结果。而直接在脚本内声明变量时,使用的是Unix换行符,不会引入\r,因此结果正常。

解决办法

方法1:转换配置文件为Unix换行格式

  • 使用dos2unix工具直接转换(大部分Linux发行版预装):
    dos2unix foo.config
    
  • 若没有dos2unix,用sed命令删除行尾的\r:
    sed -i 's/\r$//' foo.config
    
  • 或用tr命令处理:
    tr -d '\r' < foo.config > foo.config.tmp && mv foo.config.tmp foo.config
    

方法2:在脚本内清理变量中的回车符

如果无法修改配置文件,可在source后对变量做处理,移除末尾的\r:

#!/bin/bash
source foo.config
# 用参数扩展移除回车符
mypath=${mypath%$'\r'}
echo "${mypath}ABC"

或者用tr命令处理:

#!/bin/bash
source foo.config
mypath=$(echo "$mypath" | tr -d '\r')
echo "${mypath}ABC"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:52:43