Bash如果数字更大则失败

时间:2015-03-13 19:57:59

标签: bash sh

任何人都可以向我解释为什么会失败吗? 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,则该函数按预期工作。

2 个答案:

答案 0 :(得分:2)

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

  
    

前导0的常量被解释为八进制数。

  

你应该强制执行基于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

答案 1 :(得分:1)

0111 == 73,因此它小于99。

$ echo $((0111))
73