Shell 中 [[]]和[]的区别

多数情况下 [][[]]是可以通用的,两者的主要差异是: test[]是符合POSIX标准的测试语句,兼容性更强,几乎可以运行在所有Shell解释器中,相比较而言 [[]]仅可运行在特定的几个Shell解释器中(如Bash、Zsh等)。然而,目前支持使用 [[]]进行条件测试的解释器已经足够多了。使用 [[]]进行测试判断时甚至可以使用正则表达式。

主要差别:

1. 虽然 [] 也支持同时进行多个条件的逻辑测试,但是在 [] 中需要使用-a和-o进行逻辑与和逻辑或的比较操作,而 [[]] 中可以直接使用&&和||进行逻辑比较操作,更直观,可读性更好。

比如:

[[ A && B ]]或者 [ A -a B ],意思是仅当A和B两个条件测试都成功时,整体测试结果才为真。

[[ A || B ]]或者 [ A -o B ],意思是只要A或B中的任意一个条件测试成功,则整体测试结果为真。

下面我们做几个案例进行测试:

[root@centos7~]# [ yes == yes -a no == no ] && echo Y || echo N
Y
[root@centos7~]# [ yes == y -a no == no ] && echo Y || echo N
N
[root@centos7~]# [ yes == y -o no == no ] && echo Y || echo N
Y
[root@centos7~]# [ yes == yes -o no == no ] && echo Y || echo N
Y
[root@centos7~]# [[ yes == yes && no == no ]] && echo Y || echo N
Y
[root@centos7~]# [[ yes == y && no == no ]] && echo Y || echo N
N
[root@centos7~]# [[ yes == yes || no == no ]] && echo Y || echo N
Y
[root@centos7~]# [[ yes == y || no == no ]] && echo Y || echo N
Y
[root@centos7~]# [[ A == A && 6 -eq 6 && C == C ]]
[root@centos7~]# echo $?                               #返回0表示正确0
[root@centos7~]# [[ A == A && 6 -eq 3 && C == C ]]
[root@centos7~]# echo $?                               #返回非0表示错误1

2. 需要注意的还有==比较符,在 [[]] 中==是模式匹配,模式匹配允许使用通配符。例如,Bash常用的通配符有*、? 、[…]等。而==在test语句中仅代表字符串的精确比较,判断字符串是否一模一样

[root@centos7~]# name=Xiao
[root@centos7~]# [[ $name == X* ]] && echo Y || echo N
Y
[root@centos7~]# [[ a == [a-z] ]] && echo Y || echo N
Y
[root@centos7~]# [ $name == X? ] && echo Y || echo N
N
[root@centos7~]# [ $name == X* ] && echo Y || echo N
N
[root@centos7~]# name='X*'
[root@centos7~]# [ $name == 'X*' ] && echo Y || echo N
Y
[root@centos7~]# [[ a == a ]] && echo Y || echo N
Y
[root@centos7~]# [ a == b ] && echo Y || echo N
N

3.在 [[]] 中还支持使用=~进行正则匹配,而在 [] 中则完全不支持正则匹配

[root@centos7~]# name="welcome to beijing"
[root@centos7~]# [[ $name =~ w ]] && echo Y || echo N
Y
[root@centos7~]# [[ $name =~ [a-z] ]] && echo Y || echo N
Y

总结:

下表列出了[[]]和[]的差异汇总信息,相同点就不再赘述了

Shell 中 [[]]和[]的区别

Original: https://www.cnblogs.com/xiong97/p/16625974.html
Author: 静言善思
Title: Shell 中 [[]]和[]的区别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612252/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Matplotlib(基本用法)

    Matplotlib 是数据分析绘图的常见模块,可以算是 2D-绘图(Python)领域使用最广泛的套件,可以将数据图形化,并且提供多样化的输出格式,利于数据的显示并分析。 接下来…

    数据库 2023年6月16日
    0102
  • 力扣数据库题目182查找重复的电子邮箱

    力扣数据库题目182查找重复的电子邮箱 题目 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。 示例: +—-+——&#82…

    数据库 2023年6月9日
    087
  • MySQL高可用架构-MMM、MHA、MGR、PXC、分库分表(补总结)

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    0110
  • Mysql的知识梳理

    数据准备: –建表 create table customer_jia(CID int(4), Cname varchar(20), Csex varchar(2), …

    数据库 2023年5月24日
    0121
  • MySQL日期时间函数一网打尽

    获取时间 函数 功能 返回格式 CURDATE(), CURRENT_DATE() 返回当前日期,只包含年、月、日 2022-03-08 CURTIME(), CURRENT_TI…

    数据库 2023年6月9日
    072
  • centos 自己常用命令

    tar 1. 使用tar压缩文件 tar -zcvf test.tar.gz ./test/ 该命令表示压缩当前文件夹下的文件夹test,压缩后缀名为test.tar.gz 如果不…

    数据库 2023年6月11日
    083
  • django中批量插入数据

    1.什么是批量插入 在django中的orm给我们提供了一个bulk_create方法,批量创建插入数据! 2.为什么要使用批量插入 让我们首先来看看不使用大容量插入的情况: [E…

    数据库 2023年5月24日
    090
  • Mysql 数据恢复逻辑 基于binlog redolog undolog

    注:文中有个易混淆的地方”事务” sql事务,即每次数据库操作生成的事务,这个事务trx_id只在undolog里存储,因为MVVC需要记录修改的事务id,…

    数据库 2023年6月16日
    0101
  • 使用Typora + 阿里云OSS + PicGo 打造个人图床

    使用Typora + 阿里云OSS + PicGo 打造个人图床 为什么要打造图床? 让笔记远走高飞 试问以下场景: 我们要 markdown 笔记放到某博客上,直接进行复制即可。…

    数据库 2023年6月9日
    0101
  • MySQL的FIND_IN_SET函数

    语法:FIND_IN_SET(str,strlist) https://www.cnblogs.com/xiaoxi/p/5889486.html Original: https:…

    数据库 2023年6月16日
    061
  • Redis锁相关

    Redis锁相关 君不见,高堂明镜悲白发,朝如青丝暮成雪。 背景:面试的时候被问到有哪些锁,很快脱口而出Volatile、Synchronized和ReentrantLock,也能…

    数据库 2023年6月14日
    082
  • markdown语法

    特殊字符对照表 点击查看特殊字符对照表 特殊字符 描述 字符代码 空格符 & 逻辑与 < 小于号 大于号 ¥ 人民币 ± 正负号 × 乘号 ÷ 除号 © 版权符号 ®…

    数据库 2023年6月6日
    075
  • Hbase中(java.io.IOException: Could not locate executable nullbinwinutils.exe in the Hadoop binarie)

    报错信息如下: 结合大神分析,应该为本机使用Hbase时,没有配置其环境变量。 出处:https://www.cnblogs.com/jessezeng/p/5520915.htm…

    数据库 2023年6月11日
    095
  • day41-网络编程03

    Java网络编程03 5.UDP网络通信编程[了解] 5.1基本介绍 类 DatagramSocket和 DatagramPacket[&#x6570;&#x636…

    数据库 2023年6月11日
    0107
  • Linux巡检脚本

    #!/bin/bash sys:centos6.x/7.x [ $(id -u) -ne 0 ] && echo "&#x8BF7;&#x…

    数据库 2023年6月14日
    0112
  • MySQL存储引擎

    一、MySQL体系结构 1. 连接层 顶层是多个客户端和链路服务,主要完成一些类似的连接处理、授权认证、以及相关的安全解决方案。该服务器还将为每个客户提供安全保护 [En] The…

    数据库 2023年5月24日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球