为何我的Bash脚本无法运行?行9出现$'\r'语法错误求助
解决Bash脚本中$'\r'语法错误的问题
兄弟,你碰到的这个报错根源其实很明确——是Windows风格的换行符(CRLF)和Linux/bash不兼容搞的鬼!报错里的$'\r'就是Windows的回车符,bash会把它当成命令的一部分,直接导致第9行的if语句语法解析失败。
先看你的报错信息:
Main.sh: line 9: syntax error near unexpected token $'\r'
Main.sh: line 9: if (( "$#" > 3 ))
再看你提供的代码片段:
#!/bin/bash #echo "All parameters: $@" #echo "Parameter 1: $1" #echo "Parameter 2: $2" #echo "Parameter 3: $3" tempCol="tempcolfile" tempRow="temprowfile" # 后续代码省略...
解决步骤
第一步:确认问题
先验证文件的换行符类型,执行命令:file Main.sh如果输出里包含
CRLF,就实锤是Windows格式的换行符在捣乱。第二步:转换换行符
有几种简单的方法可以把文件转换成Linux兼容的LF换行符:- 用
dos2unix工具(最省心):
要是没装这个工具,用包管理器安装就行:Ubuntu/Debian用dos2unix Main.shapt install dos2unix,CentOS/RHEL用yum install dos2unix。 - 用
sed命令(无需额外装工具):
这个命令会直接删掉每行末尾的sed -i 's/\r$//' Main.sh\r字符。 - 用Vim编辑器手动转换:
打开文件后输入:set fileformat=unix,再输入:wq保存退出就搞定了。
- 用
后续预防
以后写bash脚本时,尽量用Linux原生编辑器(比如Vim、Nano);如果在Windows上编辑,记得把编辑器的换行符设置为LF(比如VS Code右下角可以直接切换CRLF/LF选项),避免再踩这个坑。
内容的提问来源于stack exchange,提问作者Ani




