a、b的ASCII码是 097、098
ASCII码 参考 http://www.51hei.com/mcu/4342.html

1. if (())

a=3; b=2 时,
if (( a > b )); then echo $a; fi  输出:3
if (( a < b )); then echo $a; fi  输出:无结果

a=2; b=3 时,
if (( a > b )); then echo $a; fi  输出:无结果
if (( a < b )); then echo $a; fi  输出:2

if (()) 内比较的是变量,即使不带 $,并不是ASCII码比较。也可以用于比较数值(如 2、3的比较),但不能用于比较未定义的变量。

注意,这里不能写成 (),为无效表达式,会报语法错误。
使用双圆括号,且可以不带 $,前后和运算符之间均无空格要求,(( $i > $j )) 等效于 (( $i>$j ))、(($i>$j))、(( i > j ))、(( i>j ))和((i>j))

2. if [[]]

a=3; b=2 时,
if [[ a > b ]]; then echo $a; fi  输出:无结果
if [[ a < b ]]; then echo $a; fi  输出:3

a=2; b=3 时,
if [[ a > b ]]; then echo $a; fi  输出:无结果
if [[ a < b ]]; then echo $a; fi  输出:2

if [[]] 要求括号里的表达式前后必须有一个空格,格式如 if [[ xxx ]]。
当 if [[]] 用于字符串常量或变量比较时,表达式本身的运算符,如 <、>、==、!= ,其前后可以不加空格;
但当 if [[]] 用于数值比较时,表达式本身的运算符前后必须加空格,否则会得到相反的结果。
因此,一般的写法都是运算符前后加上空格。

注意:
不带 $ 时,比较的是字符串常量,即ASCII码比较,如果要进行变量值的比较,必须带上 $。也可以用于比较数值(如 2、3的比较)。
这里不能写成 [],当使用 < 或 > 运算符时为无效表达式,结果为不确定值,如:
a=2; b=3 时,
if [ $a < $b ]; then echo $a; fi  输出:2
if [ $a > $b ]; then echo $a; fi  输出:2
if [ a < b ]; then echo $a; fi  输出:2
if [ a > b ]; then echo $a; fi  输出:2
可以看到输出均为2。这里,无论对a、b 赋什么值,带不带 $,if 判断结果都为True,所以一定会执行 echo $a。比较数值(如 2、3的比较)也是无效的。

3. if []

上面的 if [] 判断之所以无效,是因为 [] 里面的 > 和 < 被当作重定向符使用了,需要进行转义:
a=2; b=3 时,
if [ $a \< $b ]; then echo $a; fi  输出:2
if [ $a \> $b ]; then echo $a; fi  输出:无结果
if [ a \< b ]; then echo $a; fi  输出:2
if [ a \> b ]; then echo $a; fi  输出:无结果
if [ 2 \< 3 ]; then echo $a; fi  输出:2
if [ 2 \> 3 ]; then echo $a; fi  输出:无结果

if [] 要求括号里的表达式前后必须有一个空格,格式如 if [[ xxx ]],至于表达式本身的运算符无该要求。跟 if [[]] 一样。

注意:
当变量被赋值为数字时,和数值比较一样,可以使用如 -lt、-gt运算符替代 \< 和 \>;
当变量被赋值为字符串时,则跟字符串比较一样,只能使用 \< 和 \>。
这里 a、b 不带 $ 时作为字符串常量用于比较,字符串的比较可以简单参考26个字母表,越往后越大多个字符时,从左右往右逐位比较。

例如:
baa \< bc    结果:True
baa \< bab    结果:True
azzz \< baaa    结果:True
可以看出,最典型的,只要第一位“小”,整个字符串就“小”。

最新文章

  1. Chrome - 怎样独立窗口打开开发人员工具
  2. 9本java程序员必读的书(附下载地址)
  3. XF 文档 - Element Framework Doc
  4. 排序算法 ----(转载::http://blog.csdn.net/hguisu/article/details/7776068)
  5. DIOCP之数据接收事件
  6. Redhat 使用中文安装后更换为英文的设定
  7. 续前篇---数据挖掘之聚类算法k-mediod(PAM)原理及实现
  8. css系列教程--文本
  9. 使用Python把Gtest XML测试结果转换为HTML格式
  10. Entity Framework Batch Update
  11. 编写可维护的JS 05
  12. 【LeetCode】31. Next Permutation
  13. 【转】Redis学习笔记(五)如何用Redis实现分布式锁(2)—— 集群版
  14. ASP.NET MVC Json的序列化和反序列化
  15. Maven之基本概念及特性的基本介绍
  16. 10.3.1 iOS启动画面横屏是怎么回事?
  17. spring学习七 spring和dynamic project进行整合
  18. 哪些优秀的 Windows 小工具,类似 clover 或 everything
  19. Python matplot画散列图
  20. 【转载】Java枚举类型的使用

热门文章

  1. 使用MVC编程模型通过flask蓝图实现前端后台新闻发布系统
  2. 如何通过使用vscode工具学习ts(typescript)
  3. kali WiFi相关研究(学习中...)
  4. sublime4 支持中文
  5. vue高级进阶( 三 ) 组件高级用法及最佳实践
  6. HttpClient常用的一些常识
  7. 1996. 游戏中弱角色的数量 (Medium)
  8. 刚开始学python不知从何学习推荐你一本《Python零基础入门》书,免费领取
  9. QPushButton CSS样式
  10. Oracle ASM磁盘组的常用操作