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

macOS下Bash脚本条件语句触发"unexpected end of file"错误

macOS Bash脚本报「syntax error: unexpected end of file」的排查与解决

问题场景

在macOS Sonoma 14.4.1的Bash环境下,执行source命令加载包含if条件语句的脚本时,触发「syntax error: unexpected end of file」错误;移除该if语句后脚本可正常运行,但相同脚本在CentOS 7系统中能正常执行并输出预期内容,且已确认脚本使用Unix换行符(LF)。

核心原因

macOS默认预装的Bash版本为3.2.57(受版权限制未更新至4.x系列),而CentOS 7搭载的是Bash 4.2.46,两者在语法兼容性上存在差异。你的if语句大概率使用了Bash 4.x专属的语法特性,导致旧版本Bash无法解析,从而抛出语法错误。

常见的Bash 4.x专属语法包括:

  • 关联数组(declare -A定义)
  • [[ ... ]]条件表达式中部分正则匹配扩展特性
  • 部分变量替换的高级写法

解决办法

1. 修正if语句为兼容写法

将依赖Bash 4.x的if逻辑替换为Bash 3.x支持的语法。例如:
如果原if语句是通过版本判断:

# 原Bash 4.x兼容写法(macOS会报错)
if [[ $BASH_VERSION == 4.* ]]; then
    echo "Running Bash 4+"
fi

可改为case语句替代:

# 兼容Bash 3.x的写法
case "$BASH_VERSION" in
    4.*) echo "Running Bash 4+" ;;
esac

或借助grep实现版本判断:

if bash --version | grep -q "version 4\."; then
    echo "Running Bash 4+"
fi

2. 升级macOS的Bash版本

通过Homebrew安装新版Bash,彻底解决版本兼容问题:

# 安装Homebrew(若未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装新版Bash
brew install bash

安装完成后,将脚本的shebang行修改为新版Bash路径:

#!/opt/homebrew/bin/bash  # M1/M2芯片设备
# 或
#!/usr/local/bin/bash     # Intel芯片设备

之后使用新版Bash执行或source脚本即可。

验证方法

  1. 在macOS终端执行bash --version确认当前Bash版本
  2. 应用上述任一解决方法后,重新执行source 脚本名.sh验证是否正常运行

内容的提问来源于stack exchange,提问作者Curtis G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:23:08