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

RedHat环境下Bash脚本变量拼接异常问题求助

问题描述

在RedHat Linux环境中,名为setup的Bash脚本包含以下代码:

#!/bin/bash
#CASE_C3
export RUN_FILES_LOCATION="./Run_Files/"
export CPP_FILE="${RUN_FILES_LOCATION}/APP77.ME"
echo $CPP_FILE

执行source setup后得到输出:

/APP77.MEes/

预期输出应为:

./Run_Files//APP77.ME

变量出现逐字节覆盖而非拼接的情况,直接在终端执行相同代码正常,仅在脚本运行时出现问题。

问题原因与解决方法

这是因为脚本文件使用了Windows风格的CRLF换行符(\r\n),Bash解析时会将每行末尾的\r(回车符)保留在变量值中。

当RUN_FILES_LOCATION="./Run_Files/"被赋值时,实际值是./Run_Files/\r。后续拼接/APP77.ME时,\r会让光标回到行首,导致/APP77.ME覆盖掉前面的字符,最终出现/APP77.MEes/的异常输出(es/是./Run_Files/中未被完全覆盖的剩余部分)。

解决方法:

  • 使用dos2unix工具转换脚本格式:
    dos2unix setup
    
  • 若没有dos2unix,可以用sed删除文件中的\r字符:
    sed -i 's/\r$//' setup
    

转换后再执行source setup,即可得到预期的拼接结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:12:35