• Linux shell 比较大小 ’-gt’与’>’的区别


    本文转载自:http://www.zsythink.net/archives/2224 如果您对运维感兴趣,请在链接所在的个人技术博客中学习

    ############################################################################################

    在shell中,"-gt"或者"-lt"只能用于比较两个数字的大小,

    当我们想要比较两个字符的ASCII值时,则必须使用">"或者"<",

    而且需要注意,当使用"双中括号"进行判断时,">"或者"<"不用转义即可正常使用,

    当使用"单中括号"进行判断时,">"或者"<"需要转义后才能正常使用。 

    ############################################################################################

    本文为个人学习和记录使用,不适合初学者,初学者请参考上方的正规渠道

    bash中,如果想要比较两个数字的大小,最常用的关系运算符就是 "-gt"或者"-lt"了

    最简单的示例如下

    正如上图所示,a=3,b=2,当比较两个变量时,判断变量a的值是否大于变量b的值时,返回值为0,即结果为真,判断变量a的值是否小于变量b的值时,返回值为1,即结果为假(非零值为假)。

    但是细心如你一定注意到了,在上例中,两个变量的值均为数字,所以我们可以使用关系运算符"-gt"或者"-lt"比较两个数字的大小。

    如果是两个字符串进行比较呢?

    我们知道,字符在ASCII表中都有对应的值

    字母a在ASCII表中对应的十进制数值为97

    字母b在ASCII表中对应的十进制数值为98

    也就是说,字母a的ASCII值应该是小于字母b的ASCII值的

    那么,我们使用关系运算符,比较一下字母a与字母b,看看能否与我们想象的一样,示例如下

    可以看到,当我们直接使用 "-gt"或者"-lt"比较两个字符串时,语法错误,直接报错了,看来不能这样用。

    聪明如你,一定想到了,我们把上例中的"单中括号"换成"双中括号"试试,示例如下

    如上图所示,虽然语法上没有报错,但是结果并不正确

    字母a的ASCII值明明是小于字母b的ASCII值的

    但是,判断字符"a"的ASCII值是否大于字符"b"的ASCII值时,返回值为0(为真),也就是说,与我们期望的值并不一样,换句话说就是,通过 "-gt"或者"-lt"并不能准确的比较出两个字符的ASCII值的大小。

    所以,在比较两个字符的ASCII值的大小时,我们需要使用另一种符号,就是">"或者"<"

    没错,就是我们最常用的"大于号"或者"小于号",示例如下

    如上图所示,当我们想要比较两个字符的ASCII值时,则需要使用">"或者"<"

    但是需要注意的一点是,在使用单中括号时,如果想要使用">"或者"<",则需要转义,示例如下

    正如上图所示,当使用单中括号时,如果想要使用">"或者"<",则需要转义,如果没有对符号进行转义,虽然语法上没有报错,但是并不能正确的判断出字符的ASCII值的大小,如上图所示,当使用单中括号时,只有对符号进行转义后,才能够正确的判断出两个字符的ASCII值的大小。

    综上所述,我们可以得出 结论:

    在shell中,"-gt"或者"-lt"只能用于比较两个数字的大小,当我们想要比较两个字符的ASCII值时,则必须使用">"或者"<",而且需要注意,当使用"双中括号"进行判断时,">"或者"<"不用转义即可正常使用,当使用"单中括号"进行判断时,">"或者"<"需要转义后才能正常使用。

    那么我们来看一个应用中的小例子

    如果我们想要比较两个日期的前后,我们可以将日期的格式转化为纯数字的格式,然后进行比较,数字较大的对应的日期应该较晚,示例如下

    但是,有时候我们直接获取到的日期格式可能是字符串格式的,比如"2017-07-30",难道我们必须要把这种格式转换成纯数字格式以后再对比吗?不是的,我们可以直接对比相同字符串格式的日期,日期较晚的字符串转换成ASCII以后,ASCII值应该更大,示例如下

    使用上例中的方法,在比较日期的前后时,我们就不用必须转换字符串格式的日期了,省去了一个步骤,还是比较方便的。

  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/faberbeta/p/linuxshell039.html
Copyright © 2020-2023  润新知