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

GitHub Actions工作流if条件报错:Unexpected symbol: 'are' 如何解决?

问题解决方法

错误根源分析

  1. 模板语法未闭合:echo语句中${{ env.version_in_code are NOT equivalent"缺少闭合的}},导致YAML解析器将are误判为模板表达式的一部分,触发「Unexpected symbol: 'are'」错误。
  2. 布尔值与shell判断不兼容:用GitHub Actions表达式${{ env.version_in_code != env.version_in_tag }}生成的true/false字符串,在shell中会被当作非空字符串,无论值是什么都会判定为“真”,无法实现预期的条件判断。
  3. 环境变量执行时机问题:env字段中通过$(...)执行的shell命令,初始化时机早于run步骤,可能导致上下文(如git状态)不符合预期。

修正后的工作流代码

最稳妥的方式是直接在run步骤内完成版本获取与判断,避免环境变量的时机冲突:

- name: version check
  run: |
    # 直接在shell中获取两个版本值
    version_in_code="v$(poetry version -s)"
    version_in_tag=$(git describe --exact-match --tags $(git log -n1 --pretty='%h'))
    
    # shell原生字符串相等性判断
    if [ "$version_in_code" = "$version_in_tag" ]; then
      echo "$version_in_tag will be released"
    else
      git push -d origin "$version_in_tag"
      echo "⛔️ Tag-version: $version_in_tag and Code-version: $version_in_code are NOT equivalent"
      exit 1
    fi

关键修正点说明

  • 移除了冗余的version_is_equal环境变量,直接用shell原生的字符串比较逻辑,避免布尔值判断的歧义。
  • 修复了echo语句的模板语法错误,确保变量引用完整闭合。
  • 将版本值的获取逻辑移至run步骤内,保证shell命令在正确的上下文环境中执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:40:35