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)

大家都在看

  • MySQL索引知识点&面试常见问题

    来源:BiggerBoy作者:北哥原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL…

    数据库 2023年6月11日
    078
  • mysql中group by,having,order by,limit,distinct的用法和简单的的多表查询

    group:组 by:通过 group by :通过….。分组group by列名:通过指定列来分组 一般情况下在题目中出现 “每个” &#82…

    数据库 2023年6月16日
    0104
  • 用户管理

    介绍Linux用户组的概念和对用户添加,删除和指定密码的基本操作 用户管理 Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一…

    数据库 2023年6月16日
    0108
  • Linux下Oracle单实例配置多监听

    Oracle单实例配置多监听 一、前言 有时候我们项目中需要使用Oracle数据库,同时要需要不同的数据源,而Oracle不像Mysql那样直接建个库即可,Oracle是以账号为单…

    数据库 2023年6月16日
    0105
  • 创建镜像(alpine版)+alpine

    podman用脚本和dockerfile做apache编译安装镜像 1.0安装介质 2.0 特点 2.0 基础命令 3.0 模式 podman用脚本和dockerfile做apac…

    数据库 2023年6月14日
    084
  • 数据中有emoji,导致插入不了数据库

    前言 前两天负责的系统,因为需要获取用户的昵称并进行入库,但是有个别用户的昵称中存在emoji表情,导致入库时报错。 报错内容: java.sql.SQLException: In…

    数据库 2023年5月24日
    0113
  • 数据火器库八卦系列之瑞士军刀随APP携带的SQLite

    来源:云数据库技术 数据库打工仔喃喃自语的八卦历史 为导弹巡洋舰设计,用在手机上的数据库 Small and Simple, and Better 如何看出是自己的娃:产品定位,特…

    数据库 2023年6月11日
    097
  • 5_SpringMVC

    一. 什么是MVC框架 MVC全名是Model View Controller, 是模型(model), 视图(view), 控制器(controller)的缩写, 一种软件设计典…

    数据库 2023年6月11日
    090
  • Java中的锁——锁的分类

    Java中有各种各样的锁,例如公平锁、乐观锁等等,这篇文章主要介绍一下各种锁的分类。 *公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的…

    数据库 2023年6月9日
    072
  • MySQL实战45讲 10

    10 | MySQL为什么有时候会选错索引? 使用哪个索引是由 MySQL 来确定的 可能遇到的情况:一条本来可以执行得很快的语句,却由于 MySQL 选错了索引,而导致执行速度变…

    数据库 2023年6月16日
    088
  • Linux巡检脚本

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

    数据库 2023年6月14日
    0102
  • 什么是真正的HTAP?(一)背景篇

    To digitally transform the business, AI must be real-time. For AI to be real-time, we need…

    数据库 2023年5月24日
    088
  • 微信小程序笔记

    微信小程序笔记 文件构成 全局文件 app.json 小程序全局配置文件,必要,自动生成 app.js 小程序入口JS文件,一般只需申明全局变量、处理生命周期以及版本升级即可,必要…

    数据库 2023年6月11日
    0116
  • openstack 安装neutron网络服务安装 报错:Unknown operation ‘enabled’

    注:这个脚本文件有一个地方是错误的,最后一行需要修改一下 vim /usr/local/bin/iass-install-neutron-controller-gre.sh 改sy…

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

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

    数据库 2023年6月11日
    075
  • 719. 找出第 K 小的数对距离

    数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组…

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