GitHub Actions中布尔表达式求值结果异常问题排查
GitHub Actions布尔表达式运算结果异常的成因
核心成因
所有存入env上下文的变量,最终都会被强制转换为字符串类型存储,再结合GitHub Actions表达式的类型转换规则,就会出现你遇到的运算结果和预期不符的情况。
具体运算逻辑
GitHub Actions表达式遵循以下规则:
- 字符串转布尔值时,只有空字符串会被判定为假,所有非空字符串无论内容是什么,都会被判定为真
&&运算符:左操作数判定为真时返回右操作数,判定为假时返回左操作数||运算符:左操作数判定为真时返回左操作数,判定为假时返回右操作数!运算符:先将操作数转为布尔值,再返回取反后的布尔值
你在env中定义的VARF: ${{ false }}最终存储为字符串"false",VART: ${{ true }}最终存储为字符串"true",二者都是非空字符串,布尔判定均为真,对应运算过程如下:
${{ env.VARF && env.VART }}:左操作数判定为真,返回右操作数"true"${{ env.VARF || env.VART }}:左操作数判定为真,返回左操作数"false"${{ ! env.VARF }}:"false"转布尔为真,取反后结果为false${{ !! env.VART }}:"true"转布尔为真,两次取反后结果仍为true
完全匹配你得到的实际运行结果。
解决方案
如果需要对布尔类变量做逻辑运算,可以采用两种方案:
- 运算时显式和字符串值做对比,示例:
${{ env.VARF == 'true' && env.VART == 'true' }}
- 不要将布尔值存入env上下文,直接在表达式中使用布尔字面量、或者从vars、secrets等其他支持布尔类型的上下文读取变量。
内容的提问来源于stack exchange,提问作者BeeOnRope
相关产品推荐
相关产品推荐

