当前位置: 首页 > news >正文

LinuxShell的 中括号[], 双中括号[[]], 双小括号(()) 笔记231207

LinuxShell的 中括号[], 双中括号[[]], 双小括号(())

  • 中括号[], 双中括号[[]], 双小括号(()) 都可用于条件判断

  • 双中括号[[]] , 算是 中括号[]的增强
    双中括号[[]][[是bash的关键字, 并不是命令

    [remotet@vb-f39 /]$ type [[
    [[ 是 shell 关键字
    
  • 单双中括号[][[]] 既可以用于字符串比较, 也可以用于整数比较
    单双等号===用于字符串比较, -eq用于整数比较

  • 双小括号(())只能用于整数比较, 不能用于字符串比较
    =赋值, 用==比较



单等号=和双等号==-eq

中括判字符, 小括判数字

  • 在 中括号[] 双中括号[[]] 中, 单等号=和双等号== 效果相同, 用于字符串判断
if [ "a" = "a" ];
if [ "a" == "a" ];
if [ "$VarName1" = "$VarName2" ];
if [ "$VarName1" == "$VarName2" ];
  • 在双小括号(())中, 单等号=用于赋值 双等号==用于数值大小判断
if (( a==3 ));
if (( $a==3 ));
for((i=0;i<10;i++));
  • 中括号要有空格,双小括号可以没有, 中括号要$,小括号可有可无$
if [ "$v" = "hello" ];
if [ "$v" == "hello" ];
if((v==6));
if(($v==6));
  • 中括号双中括号可以用 -eq 进行整数大小判断, 双小括号不能用-eq
if [ "$v" -eq 6 ];
if [[ "$v" -eq 6 ]];
if((v==6));
if(($v==6));

test, 可粘贴到控制台测试

v="hello"
if [ "$v" = "hello" ]; then  echo yes; else echo no; fi
if [ "$v" == "hello" ]; then  echo yes; else echo no; fi
if [[ "$v" = "hello" ]]; then  echo yes; else echo no; fi
if [[ "$v" == "hello" ]]; then  echo yes; else echo no; fi
if [ "$v" -eq 6 ]; then  echo yes; else echo no; fi
if [[ "$v" -eq 6 ]]; then  echo yes; else echo no; fi
if((v==6)); then  echo yes; else echo no; fi
if(($v==6)); then  echo yes; else echo no; fi
echo "----------------------------------------------------------------"
v=6
if [ "$v" = "hello" ]; then  echo yes; else echo no; fi
if [ "$v" == "hello" ]; then  echo yes; else echo no; fi
if [[ "$v" = "hello" ]]; then  echo yes; else echo no; fi
if [[ "$v" == "hello" ]]; then  echo yes; else echo no; fi
if [ "$v" -eq 6 ]; then  echo yes; else echo no; fi
if [[ "$v" -eq 6 ]]; then  echo yes; else echo no; fi
if((v==6)); then  echo yes; else echo no; fi
if(($v==6)); then  echo yes; else echo no; fi

测试效果

[z@vb-f39 txt]$ v="hello"
if [ "$v" = "hello" ]; then  echo yes; else echo no; fi
if [ "$v" == "hello" ]; then  echo yes; else echo no; fi
if [[ "$v" = "hello" ]]; then  echo yes; else echo no; fi
if [[ "$v" == "hello" ]]; then  echo yes; else echo no; fi
if [ "$v" -eq 6 ]; then  echo yes; else echo no; fi
if [[ "$v" -eq 6 ]]; then  echo yes; else echo no; fi
if((v==6)); then  echo yes; else echo no; fi
if(($v==6)); then  echo yes; else echo no; fi
echo "----------------------------------------------------------------"
v=6
if [ "$v" = "hello" ]; then  echo yes; else echo no; fi
if [ "$v" == "hello" ]; then  echo yes; else echo no; fi
if [[ "$v" = "hello" ]]; then  echo yes; else echo no; fi
if [[ "$v" == "hello" ]]; then  echo yes; else echo no; fi
if [ "$v" -eq 6 ]; then  echo yes; else echo no; fi
if [[ "$v" -eq 6 ]]; then  echo yes; else echo no; fi
if((v==6)); then  echo yes; else echo no; fi
if(($v==6)); then  echo yes; else echo no; fi
yes
yes
yes
yes
bash: [: hello: 需要整数表达式
no
no
no
no
----------------------------------------------------------------
no
no
no
no
yes
yes
yes
yes
对比中括号[]和双中括号[[]]

在Shell中,方括号([])和双层方括号([[ ]])都用于条件测试。它们的功能相似,但双层方括号提供了更多的功能和灵活性。

  1. 单层方括号([]):

    • 用于条件测试,例如判断文件是否存在、判断字符串是否等于某个值等。
    • 不支持正则表达式匹配,只能进行简单的字符串匹配。
    • 不支持逻辑操作符,如-a(与)、-o(或)和!(非)。
  2. 双层方括号([[ ]]):

    • 与单层方括号类似,用于条件测试。
    • 支持正则表达式匹配,可以使用=~操作符进行匹配。
    • 支持逻辑操作符,如-a(与)、-o(或)和!(非)。
    • 提供更好的错误处理和防止字符串拆分和文件名扩展的特性。

下面是一些示例,展示了单层方括号和双层方括号的用法:

使用单层方括号:

if [ -f "file.txt" ]; thenecho "File exists."
fiif [ "hello" == "world" ]; thenecho "Strings are equal."
fi

使用双层方括号:

if [[ -f "file.txt" ]]; thenecho "File exists."
fiif [[ "hello" == "world" ]]; thenecho "Strings are equal."
fi

可以看到,双层方括号提供了更多的功能和灵活性,因此在编写复杂的条件语句时,建议使用双层方括号。

相关文章:

  • Java Web应用优化 认识软件设计分层架构
  • Spring Boot 3 集成 Druid 连接池详解
  • 游戏被攻击该怎么办?游戏盾该如何使用,游戏盾如何防护攻击
  • IDEA使用git从远程仓库获取项目
  • 大屏图表汇总echarts圆环
  • LAMP架构
  • 用户案例|Milvus 助力 Credal.AI 实现 GenAI 安全与可控
  • 【数据结构 — 排序 — 选择排序】
  • typedef 与#define 的区别
  • Spring Boot 整合kafka:生产者ack机制和消费者AckMode消费模式、手动提交ACK
  • SAP UI5 walkthrough step2 Bootstrap
  • Html转PDF,前端JS实现Html页面导出PDF(html2canvas+jspdf)
  • PTA:哈夫曼编码
  • class067 二维动态规划【算法】
  • 自然语言处理:电脑如何理解我们的语言?
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 4. 路由到控制器 - Laravel从零开始教程
  • Android系统模拟器绘制实现概述
  • Laravel Telescope:优雅的应用调试工具
  • Laravel核心解读--Facades
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • vue:响应原理
  • 从0实现一个tiny react(三)生命周期
  • 读懂package.json -- 依赖管理
  • 后端_ThinkPHP5
  • 计算机常识 - 收藏集 - 掘金
  • 开源SQL-on-Hadoop系统一览
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 深度解析利用ES6进行Promise封装总结
  • 首页查询功能的一次实现过程
  • 再次简单明了总结flex布局,一看就懂...
  • 智能合约开发环境搭建及Hello World合约
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 飞书APP集成平台-数字化落地
  • #162 (Div. 2)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (1)bark-ml
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (5)STL算法之复制
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (PySpark)RDD实验实战——取一个数组的中间值
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (三)uboot源码分析
  • (十二)Flink Table API
  • (一) springboot详细介绍
  • (一)RocketMQ初步认识
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)甲方乙方——赵民谈找工作
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • ****三次握手和四次挥手
  • .java 9 找不到符号_java找不到符号
  • .Mobi域名介绍
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复