You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何我的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换行符:

    1. dos2unix工具(最省心):
      dos2unix Main.sh
      
      要是没装这个工具,用包管理器安装就行:Ubuntu/Debian用apt install dos2unix,CentOS/RHEL用yum install dos2unix
    2. sed命令(无需额外装工具):
      sed -i 's/\r$//' Main.sh
      
      这个命令会直接删掉每行末尾的\r字符。
    3. 用Vim编辑器手动转换:
      打开文件后输入:set fileformat=unix,再输入:wq保存退出就搞定了。

后续预防

以后写bash脚本时,尽量用Linux原生编辑器(比如Vim、Nano);如果在Windows上编辑,记得把编辑器的换行符设置为LF(比如VS Code右下角可以直接切换CRLF/LF选项),避免再踩这个坑。

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

火山引擎 最新活动