You need to enable JavaScript to run this app. Shell脚本中if/else语句对乘法运算符(*)判断异常问题
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本中if/else语句对乘法运算符(*)判断异常问题

异常根因

elif [[ $op == * ]] 永远返回真的核心原因,是Bash的[[ ]]结构会把==右侧的字符串解析为通配匹配模式,而非固定待匹配字符串:

  • 单独书写的*是Bash内置通配符,代表“匹配任意长度、任意内容的字符串”
  • 只要$op有非空值,不管是除法符/、幂符^还是其他任意输入,都能被这个通配模式匹配,条件自然恒成立。
修正方案

要实现“判断输入是否为字面乘号*”的逻辑,可选择以下任意一种可靠写法:

  • 对通配符做转义,使其失去特殊匹配含义:
    elif [[ $op == \* ]]
  • 用单引号包裹字面乘号,明确指定这是固定匹配值:
    elif [[ $op == '*' ]]
  • 绕开通配匹配逻辑,使用单括号执行严格字符串相等判断:
    elif [ "$op" = '*' ]
补充说明

类似/、^、+这类不属于Bash通配规则定义的特殊字符,直接写在==后不会触发通配匹配逻辑,因此不会出现和*一致的判断失效问题,这也是你仅在匹配乘号的分支遇到误判的原因。


内容的提问来源于stack exchange,提问作者L'Agatha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 13:15:04