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

Bash脚本动态路径生成异常求助:输出不符合预期

问题分析与解决

问题根源

你遇到的路径错乱问题,核心原因是输入参数filename(或脚本文件本身)带有不可见的回车符(\r)。比如从Windows环境复制参数/脚本时,会引入CRLF格式的换行符,导致变量$filename的实际值是sales\r而非纯sales。

当拼接路径data/$filename/$filename.csv时,\r会触发终端光标回到行首,后面的.csv会覆盖前面的路径内容,最终出现csvsales这类错乱输出。而仅写path=data/$filename/时,因为后面没有额外字符覆盖,所以看起来输出正常,但变量里的\r依然存在。

解决方法

1. 清理变量中的回车符

在给filename赋值后,添加一行代码去除变量里的\r:

# 方法1:用tr命令清理
filename=$(echo "$1" | tr -d '\r')

# 方法2:用Bash参数替换(更高效)
filename=${1//$'\r'/}

2. 修复脚本文件的换行格式

如果脚本本身是Windows CRLF格式,用dos2unix工具转换为Linux LF格式:

dos2unix demo.sh

3. 完整修改后的脚本

#!/bin/sh

# 清理参数中的回车符
filename=${1//$'\r'/}

# 提前创建目标目录,避免aws cp因目录不存在报错
mkdir -p data/$filename

path=data/$filename/$filename.csv
echo "$path"

aws s3 cp s3://bucket/key/$filename.csv "$path"

验证

执行sh demo.sh sales后,echo $path会正确输出data/sales/sales.csv,aws cp也能正常将文件复制到目标路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:21:26