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

在WSL中执行Bash脚本遇语法错误,求教原因与解决办法

问题原因与解决方案

你的脚本写法本身没问题,报错的核心原因是Windows与Linux的换行符格式不兼容:

  • Windows系统默认用CRLF(\r\n)作为换行符,而Linux/Unix系统用LF(\n)。
  • 你在Windows环境下编辑的脚本,每行末尾会带一个隐藏的\r字符,当WSL里的sh解析时,会把函数闭合的}后面的\r当成字符的一部分,导致shell认为函数没有正确闭合,因此抛出"expecting }"的语法错误。

解决方法

可以用以下几种方式修复:

  1. 用WSL工具转换换行符
    先安装dos2unix工具(如果没装的话):
    sudo apt update && sudo apt install dos2unix
    
    然后转换脚本:
    dos2unix helloworld.sh
    
  2. 直接用sed命令移除多余的\r
    无需额外安装工具,执行:
    sed -i 's/\r$//' helloworld.sh
    
  3. 编辑时直接设置LF换行
    用代码编辑器(比如VS Code、Notepad++)编辑脚本时,将换行格式设置为LF:
    • VS Code:右下角状态栏可以切换换行格式,选择「LF」
    • Notepad++:菜单栏「编辑」→「EOL转换」→「Unix(LF)」

修复后再执行wsl ./helloworld.sh就能正常输出Hello World!了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:36:33