Bash 如果数字大于则失败

Bash if number greater then failing

任何人都可以向我解释为什么会失败吗? 0111 大于 99,但我没有收到无效的数据库消息。

db=0111
echo $db
£ Verify db is within the correct range
if [[ $db -lt 0 ]] || [[ $db -gt 99 ]]; then
    echo "Invalid database"
fi

如果我将 db 更改为 db=111 甚至 db=01111,该函数将按预期工作。

0111 == 73,所以小于99.

$ echo $((0111))
73

因为正如@Koiro 在评论中所说:

Constants with a leading 0 are interpreted as octal numbers.

你应该强制执行基于 10 的算法

db=0111
echo $db
# Verify db is within the correct range
if [[ 10#$db -lt 0 ]] || [[ 10#$db -gt 99 ]]; then
    echo "Invalid database"
fi

打印

0111
Invalid database