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
可以看出,最典型的,只要第一位“小”,整个字符串就“小”。

if (()) [[]] [] 条件表达式比较示例的更多相关文章

  1. 【C语言探索之旅】 第一部分第六课:条件表达式

    内容简介 1.课程大纲 2.第一部分第六课:条件表达式 3.第一部分第七课预告:循环语句 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...

  2. [Inside HotSpot] C1编译器优化:条件表达式消除

    1. 条件传送指令 日常编程中有很多根据某个条件对变量赋不同值这样的模式,比如: int cmov(int num) { int result = 10; if(num<10){ result ...

  3. [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数

    前言:本文以学习记录的形式发表出来,前段时间苦于照模型聚合中group by 找了很久,官方文章中没有很明确的说出group by,但在文档中有提到!!! 正文(最后编辑于2016-11-12): 聚 ...

  4. Scala:条件表达式的好处

    条件表达式的好处之一是:让代码更简洁,例如在一个需要根据不同条件收集不同值的场景中,多数语言提供的代码如下: ; ) { tmp = xxx; } ) { tmp = yyy; } else { tm ...

  5. Shell 条件表达式汇总

    条件表达式 文件表达式 if [ -f  file ]    如果文件存在if [ -d ...   ]    如果目录存在if [ -s file  ]    如果文件存在且非空 if [ -r f ...

  6. shell之条件表达式

    conditional expressions are used by the [[ compound command and the test and [ builtin commands. ari ...

  7. Python学习教程(learning Python)--3.3 分支语句的条件表达式详解

    本节主要讨论分支语句的条件表达式问题. 在if或者if-else分支控制语句里由于都用到条件判断(表达式是真还是假),条件判断可以是一种关系运算也可以是布尔表达式. 本节将对if及if-else语句的 ...

  8. golang没有条件表达式?:

    详见The Go Programming Language Specification中Expressions一章中未提及此表达式, 故其不支持. 再强调一次, GO不支持条件表达式 conditio ...

  9. thymeleaf条件表达式

    条件表达式形式:condition, then and else <tr th:class="${row.even}? 'even' : 'odd'"> ... < ...

  10. SQL条件表达式

    需求:数据表中如果满足某个条件,返回表中所有数据,否则不返回数据. 语法:CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句. CASE WHEN condition T ...

随机推荐

  1. P1219 [USACO1.5]八皇后 Checker Challenge

    好长时间没登博客园了,今天想起了账号密码,遂发一篇题解 最近因为复赛正在复健搜索,所以做了这道题 这道题说难并不是很难,但是在于这个题需要找到两个规律 以下是原题 [USACO1.5]八皇后 Chec ...

  2. 解决python 操作 hbase报错:TTransportException(type=4,message=’TSocket read 0 bytes’)

    ```text# 解决报错:hbase报错TTransportException(type=4,message='TSocket read 0 bytes')这种情况一般协议问题和服务端没开启,如果服 ...

  3. 实验1task4

    <实验结论> #include <stdio.h> #include <stdlib.h> int main() { int x, t, m; x = 123; p ...

  4. Nginx基础篇

    目录 一.nginx基础篇 1.Nginx开源版本安装 2.Nginx的基础配置 3.虚拟主机与域名解析 4.ServerName匹配规则 5.反向代理 6.动静分离 7.location后符号的匹配 ...

  5. 【git】3.2git分支-分支的新建与合并

    资料来源 (1) https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0% ...

  6. 必备技能,MySQL 查找并删除重复行

    本文讲述如何查找数据库里重复的行.这是初学者十分普遍遇到的问题.方法也很简单.这个问题还可以有其他演变,例如,如何查找"两字段重复的行"(#mysql IRC 频道问到的问题) 如 ...

  7. Chrome 中的 JavaScript 断点设置和调试技巧--转自hanguokai.com

    你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容.嗯~,用 ...

  8. Ubuntu16.04系统语言设置为中文以及搜狗输入法的安装

    特别声明:本文是在操作完才做的记录,不是特别详细,见谅哈! 虚拟机安装的Ubuntu16.04结果语言设置只有英文...起初没啥影响,后来发现自己的脚本注释显示全乱码,而且直接影响脚本运行(其实可能是 ...

  9. 创建SFTP用户并指定访问目录 Linux

    1.创建登录用户及用户组   --可以根据自身磁盘挂载情况制定用户home目录 -d 选项 groupadd test1mkdir -p /data/test1 useradd test1 -g te ...

  10. Day 22 22.2:scrapy部署

    scrapy项目部署 scrapyd部署工具介绍 scrapyd是一个用于部署和运行scrapy爬虫的程序,它由 scrapy 官方提供的.它允许你通过JSON API来部署爬虫项目和控制爬虫运行. ...