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

Bash条件判断中为何216会大于0330?

Bash数字比较异常的原因解析

在Bash的[[ ]]条件判断结构中,以0开头的数字会被识别为八进制数,而非十进制数,这就是导致你看到异常结果的核心原因。

你测试里的0330是八进制表示,转换成十进制的计算过程为:
3×8² + 3×8¹ = 3×64 + 3×8 = 192 + 24 = 216

对应到你的测试场景:

  • 当N=215时,实际是比较十进制的215和八进制0330转成的十进制216,215 -ge 216不成立,输出no
  • 当N=216时,216 -ge 216成立,输出ok
  • 当N=217时,217 -ge 216成立,输出ok

如果要按照十进制规则比较,有两种解决方式:

  • 去掉数字前的0,直接用十进制数值330进行比较
  • 用10#前缀强制指定为十进制,比如:
N=329 ; if [[ $N -ge 10#0330 ]]; then echo ok ; else echo no; fi

这样10#0330会被解析为十进制的330,就能得到你预期的比较结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:02:38