# shell中’-gt’与’>’的区别

- 16

- A+

所属分类：Shell 编程

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值应该更大，示例如下

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

好了，这篇文章就总结到这里，希望能够帮助到你~

求关注，求收藏，求推荐~~~

我的微信公众号
关注"实用运维笔记"微信公众号，当博客中有新文章时，可第一时间得知哦~
赞 49
赏
分享

- Shell（bash）

- 版权声明：本站原创文章，于2017年7月30日13:29:33，由 朱双印 发表，共 1358 字。
- 如需转载，请在文章头部注明出处：shell中’-gt’与’>’的区别 | 朱双印博客

shell中常用的变量处理、字符串操作（之三）
shell中常用的变量处理、字符串操作（之二）
shell中常用的变量处理、字符串操作（之一）
bash中 [ ] 与 [[ ]] 的区别

### 发表评论取消回复

欢迎 pangzi 再次光临！
修改信息

正在提交, 请稍候...
#

昵称*

邮箱*

网址

有回复时邮件通知我

## 目前评论：16 其中：访客 10 博主 6

2. darkidot 2
   回复 2019年11月1日 下午2:27 沙发

   突然感觉lshell的语法好麻烦啊，各种括号。。。。空格。。。。

4. 一个苦逼研究生 0
   回复 2018年1月21日 上午10:57 板凳

   很抱歉简单的提取了一下网页的源码。。。将这个文章的部分内容提取出来作为笔记。。。因为写的很棒。不会侵权与传播，仅仅是学习备用，假如作者不允许的话请联系邮箱。我会删除的。冒昧之处请多多包涵。

6. 妞妞 4
   回复 2017年12月13日 下午5:33 地板

   [root@salt-control tmp]# [[ 2 > 1 ]]
   [root@salt-control tmp]# echo $?
   0
   [root@salt-control tmp]# [[ 2 > 10 ]]
   [root@salt-control tmp]# echo $?
   0
   [root@salt-control tmp]# [[ 2 -gt 10 ]]
   [root@salt-control tmp]# echo $?
   1
   [root@salt-control tmp]# [[ 3 > 100 ]]
   [root@salt-control tmp]# echo $?
   0
   [root@salt-control tmp]# [[ 3 -gt 100 ]]
   [root@salt-control tmp]# echo $?
   1

   朱兄，双中括号[[ ]] 里面比较数字大小好像是按数字的对应位来比较的。不是按照整体数字的大小来比较。

   - 朱双印 Admin
     回复 2017年12月13日 下午5:46 1层

     @妞妞 兄弟，是按照ASCII的值比较的，只不过日期转换成相同格式的字符串以后，正好日期大的ASCII值大，所以利用了这一点
     可以百度”ASCII码对照表”,找一个在线ASCII码查询网站，把字符串输入进去试试

     - 妞妞 4
       回复 2017年12月13日 下午6:06 2层

       @朱双印 OK,明白了 > < 只能以ASCll 码来比较字符串。不能用来比较数字

       - tlanyan 1
         回复 2020年9月6日 下午8:39 3层

         @妞妞 赞👍

     - 灰太狼 1
       回复 2019年6月15日 下午8:06 2层

       @朱双印 准确来说，当使用 “>” 或 “” 和 “<” 比较字符串时，是对应位上的字符逐个进行比较的，比较的依据是字符在系统当前所使用的字符编码中的代码点，并不一定是 ASCII 码。因为如果只是按照字符在 ASCII 编码中的代码点，那么非 ASCII 字符就无法比较了。

       - 朱双印 Admin
         回复 2019年6月16日 下午5:44 3层

         @灰太狼 666，回来测试一下，加油，共勉~~

8. 我的电脑 3
   回复 2017年10月3日 上午10:13 4楼

   博主我想问下你这个文章站内搜索是用的sphinx吗？还想问下比如编译安装完了mysql，那想在mysql增加一个插件，比如sphinx这个该如何操作？

   - 朱双印 Admin
     回复 2017年10月4日 下午9:26 1层

     @我的电脑 站内搜索用的都是主题自带的，还有百度与360的站内搜索代码，插件这个没用过，不知道怎么弄，没有办法帮到你，加油~~

10. 我的电脑 3
    回复 2017年10月2日 下午10:40 5楼

    shell中让人感到痛苦的就是() [[]] [] && || -gt -lt -eq这些符号还有就是0为真，1为假。为什么不按套路出牌把1设定为真，0为假！

    - 朱双印 Admin
      回复 2017年10月4日 下午9:15 1层

      @我的电脑 0和1这个有过其他编程经验的的确不习惯，其他的也是一种习惯，每次出错都检查一下语法，时间长了就会按照正确的语法写了，加油

    - cc 1
      回复 2019年5月30日 下午5:19 1层

      @我的电脑 其实并不是把0当作真，1当作假，而是把0作为执行成功的返回值，而把非0作为执行失败的返回值；
      其他很多编程语言也都是这样的规定的。
      大概是因为“正确只有一种，但错误可能有多种”吧……

      - 朱双印 Admin
        回复 2019年5月30日 下午8:12 2层

        @cc 对的，已经添加了说明，不说明的确容易误解，感谢指正~

12. 我的电脑 3
    回复 2017年9月29日 下午11:16 6楼

    弱弱的问下博主，这个微信和支付宝的二维码是不是要先从手机上生成，然后保存到电脑上，然后截取图中的二维码？

    - 朱双印 Admin
      回复 2017年9月30日 上午10:39 1层

      @我的电脑 微信的可以用电脑直接生成的，网上有好多网站，不过支付宝的我是在手机上弄的，然后电脑截图的，其实怎么样都行

- 文章目录

×
×
拖拽到此处
图片将完成下载