bash - 了解 bash *String* 比较

标签 bash

我正在尝试比较版本号。例如,如果 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/

相关文章:

regex - bash sed/grep 提取两个词之间的文本

bash - 如何使用awk修改文件?

Linux Bash 如何在需要从标准输入/文件输入的程序上使用 xargs?

python-3.x - 命令提示符显示 "No such file or directory"但文件存在

bash - 如何 ${@ : -1} expand to last argument

Git 无法识别别名

bash - 无法在 shell 脚本中转义引号

linux - cut 命令分隔输出并添加它们

bash - 一次创建所有分支时出错

linux - 用于获取 USB 信息的 udev/Bash 脚本