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

Bash脚本使用||判断非rpm/jar扩展名时条件始终返回true

问题现象

编写bash脚本实现字符串取值判断,目标逻辑为:当字符串取值不是rpm或jar时进入对应分支,但实际运行时条件判断始终返回true。
原脚本代码:

#!/bin/bash
FILE_EXTENSION="rpm"

if [ "$FILE_EXTENSION" != "jar" ] || [ "$FILE_EXTENSION" != "rpm" ];
then
    echo "File type is NOT rpm or jar";
else
    echo "File type is rpm or jar";
fi

echo "Debug: FILE_EXTENSION value is $FILE_EXTENSION"

实际运行时,即使FILE_EXTENSION已赋值为rpm,依然会进入非目标类型的分支,运行输出如下:

$ ./check3.sh 
File type is NOT rpm or jar
Debug: FILE_EXTENSION value is rpm
$
错误原因

条件判断的逻辑运算符使用错误:
原逻辑用||(逻辑或)连接两个不等于判断,该逻辑恒为真——任意字符串不可能同时等于rpm和jar,两个判断中永远至少有一个成立,而或运算只要任意一个条件为真,整体结果就为真:

  • 当值为rpm时,!= "jar"的判断成立,整体结果为真
  • 当值为jar时,!= "rpm"的判断成立,整体结果为真
  • 当值为其他字符串(如txt、deb)时,两个判断都成立,整体结果依然为真
修复方案

将两个判断之间的||替换为&&(逻辑与),只有当字符串同时不等于jar、也不等于rpm时,才判定为非目标类型。
修复后的核心判断代码:

if [ "$FILE_EXTENSION" != "jar" ] && [ "$FILE_EXTENSION" != "rpm" ];
then
    echo "File type is NOT rpm or jar";
else
    echo "File type is rpm or jar";
fi

修复后运行验证输出:

$ ./check3.sh
File type is rpm or jar
Debug: FILE_EXTENSION value is rpm

可选简化写法:使用bash双括号支持的正则匹配,可以把多个值的判断合并为一条,效果完全一致:

if [[ ! "$FILE_EXTENSION" =~ ^(jar|rpm)$ ]]; then
    echo "File type is NOT rpm or jar"
else
    echo "File type is rpm or jar"
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:06:19