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

Bash脚本变量拼接字符串时内容错位问题求助

问题根源:Windows换行符(CRLF)导致的光标回退

你的问题其实是文件里的换行符格式不对——playlist-info-test.txt是Windows格式的CRLF(回车+换行),而Bash在处理时会把行尾的\r(回车符)当成行内容的一部分。当你执行echo $input_file时,\r会让终端光标回到当前行的开头,后面的.mp3就会覆盖掉前面的字符串,所以才出现了.mp3list 1这种奇怪的输出。

验证问题

先确认文件里的换行符:

cat -A playlist-info-test.txt

如果输出里每行结尾是^M$(^M是\r的可视化表示),那就坐实了是Windows换行符的问题。

解决步骤

1. 转换文件为Unix格式

用dos2unix工具转换(如果没有的话,大多数Linux发行版可以通过包管理器安装):

dos2unix playlist-info-test.txt

如果没有dos2unix,也可以用sed手动移除行尾的\r:

sed -i 's/\r$//' playlist-info-test.txt

2. 优化你的遍历脚本

你原来用wc -l+sed遍历行的方式效率很低,还容易出错,推荐用更简洁可靠的while read循环,同时加上IFS=和-r参数来保留行内的空格、避免转义字符被解析:

INFO_FILE=playlist-info-test.txt
while IFS= read -r current_line; do
    input_file="${current_line}.mp3"
    echo "$input_file"
done < "$INFO_FILE"

这个写法不仅能适配正确格式的文件,还能完美处理带空格的行内容。

为什么你之前的while read没起作用?

你提到尝试过while read line但没改善,大概率是因为没先处理文件里的\r,或者没加IFS=和-r参数导致空格被截断,但核心问题还是文件的换行符格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:53:11