我在 Bash 中执行的‘if’比较发生了什么?

我在 Bash 中执行的‘if’比较发生了什么?

bash 输入:

if [[ 167 > 10800 ]]
then
    echo "I can't compare"
fi

bash 输出:

I can't compare

我想这个问题很明显……

答案1

引用bash(1)手册页:

当与 [[ 一起使用时,< 和 > 运算符使用当前语言环境按字典顺序排序。

因此 167 确实大于 10800,因为 6 是一个比 0 更大的 ASCII 字符。

答案2

>字符不适用于您想要的比较类型。您必须使用-gt

if [[ 167 -gt 10800 ]]
then
    echo "I can't compare"
fi

如果你想做一个小于比较,你需要做-lt。要查看你需要做哪些其他比较选项,请查看test手册页

答案3

使用弧形括号进行真正的数字比较

if (( 167 > 10800 ))
then
    echo "I can't compare"
fi

这里有很好的总结:http://fvue.nl/wiki/Bash:_Numeric_comparison

相关内容