在bash条件语句中,为什么216大于0330

  • 本文关键字:大于 0330 bash 条件 语句 bash
  • 更新时间 :
  • 英文 :


在Bash 215中不大于0330。

$ N=215 ; if [[ $N -ge 0330 ]]; then echo ok ; else echo no; fi
no

但是,216不大于0330。我觉得这太奇怪了。为什么会发生这种情况?

$ N=216 ; if [[ $N -ge 0330 ]]; then echo ok ; else echo no; fi
ok
$ N=217 ; if [[ $N -ge 0330 ]]; then echo ok ; else echo no; fi
ok

我预计‘329-ge 0330’是不可以的,‘330-ge 033’是可以的

选取基数

在零前导的情况下,bash认为他必须处理八进制表示法。

$ N=216 ; if ((N < 10#0330)); then echo ok ; else echo no; fi 
#                  ^^^
#                base 10
ok

http://mywiki.wooledge.org/ArithmeticExpression

0330被解释为八进制数,因为它以前导零开头。在八进制记数法中,十进制值330表示为516,它大于215