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

为何BASH中OR逻辑IF语句始终返回true?NODE_ENV设为testing仍异常

嘿,你把逻辑运算符搞反啦!

你写的条件[[ $NODE_ENV != "testing" || $NODE_ENV != "development" ]]不管NODE_ENV是什么值,结果都会是true——这就是为啥脚本每次都触发退出逻辑的原因。

咱们拆解开看看逻辑:

  • 当NODE_ENV是testing时:第一个判断$NODE_ENV != "testing"为假,但第二个判断$NODE_ENV != "development"为真,||(逻辑或)只要有一个条件为真,整个表达式就为真;
  • 当NODE_ENV是development时:第一个判断为真,第二个为假,||还是会返回真;
  • 如果是其他值:两个判断都为真,结果自然也是真。

你真正想要的逻辑应该是:当NODE_ENV既不是testing也不是development时执行退出操作,这时候得用&&(逻辑与)代替||:

if [[ $NODE_ENV != "testing" && $NODE_ENV != "development" ]]; then
    echo "❌ Not a development OR testing environment: NODE_ENV is not set to development OR testing"
    exit 1
fi

另外,给你推荐几个可读性更强的写法:

  • 用case语句,逻辑更直观:
case "$NODE_ENV" in
    testing|development)
        # 环境符合要求,啥也不用做
        ;;
    *)
        echo "❌ Not a development OR testing environment: NODE_ENV is not set to development OR testing"
        exit 1
        ;;
esac
  • 用bash的正则匹配:
if [[ ! $NODE_ENV =~ ^(testing|development)$ ]]; then
    echo "❌ Not a development OR testing environment: NODE_ENV is not set to development OR testing"
    exit 1
fi

这样调整后,就能正确判断NODE_ENV是否在允许的范围内啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:33:24