GitHub Actions工作流if条件报错:Unexpected symbol: 'are' 如何解决?
问题解决方法
错误根源分析
- 模板语法未闭合:echo语句中
${{ env.version_in_code are NOT equivalent"缺少闭合的}},导致YAML解析器将are误判为模板表达式的一部分,触发「Unexpected symbol: 'are'」错误。 - 布尔值与shell判断不兼容:用GitHub Actions表达式
${{ env.version_in_code != env.version_in_tag }}生成的true/false字符串,在shell中会被当作非空字符串,无论值是什么都会判定为“真”,无法实现预期的条件判断。 - 环境变量执行时机问题:
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
相关产品推荐
相关产品推荐

