我正在尝试比较版本号。例如,如果 10.9 小于 10.11。
有人可以解释一下为什么这不打印"is"吗?
if [[ "9" < "10" ]]; then echo yes; fi
我需要做什么才能使这项工作正常工作,清楚地表明,9 应该小于 10?
此外,如果我在变量 $VERSION 中有“10.9”,那么如何将其与“10.11”进行比较,因为这也无法打印“yes”
if [[ $VERSION < "10.11" ]]; then echo yes; fi
最佳答案
在这种情况下,这将返回正确的答案
if [[ "8" < "9" ]]; then echo yes; fi
但对于您的具体情况,“10”小于“9”,因为 1 小于 9。 字符串比较的工作方式与数字比较不同,因此顺序将是这样的
1
10
20
21
3
...
您可以将字符串转换为数字,并对数值使用-lt
(小于)运算符。 Bash 值是无类型的,所以这可以工作
if [ "9" -lt "10" ]; then echo yes; fi
可以找到一些 Bash 引用 here
请注意,“10.9”不能与 float 一起使用。您可以为此使用 awk 比较。
if [ -n "10.1" -a -n "10.2" ]; then echo yes; fi
关于bash - 了解 bash *String* 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31513223/