为何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
相关产品推荐
相关产品推荐

