尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

shell 字符串比较的底层逻辑,以及 [ ] 与 [[ ]] 的本质区别

shell 字符串比较的底层逻辑,以及 [ ] 与 [[ ]] 的本质区别
📅 发布时间:2026/6/19 21:33:48

shell 字符串比较的底层逻辑,以及 [ ] 与 [[ ]] 的本质区别

字符串比较的本质:逐个比较字符的 ASCII 或 Unicode 码点,一旦分出胜负就结束

在 [ ] 或 [[ ]] 中使用的字符串比较运算符

  • =、==、!=、<、>、=~
  • -z:字符串长度为 0
  • -n:字符串长度不为 0

注意:

  • < 和 > 在 [ ] 中使用时 必须带 引号 或 转义,否则会被 shell 当作重定向符号
  • = 和 == 是等价的,在 [ ] 和 [[ ]] 都可以使用。

[ ] 和 [[ ]] 的区别:[ ] 是一个命令; [[ ]] 是 shell 中的关键字

  • 关键字:shell 语法的一部分,在 shell 解析阶段,也就是最开始阶段就会被识别处理。

  • 命令:分为内部命令和外部命令,是 shell 完成语法解析之后才会执行。


因为 关键字 和 命令 在 shell 的生命周期中先后顺序不同,所以要先理解 shell 的生命周期,才能知道 [] 和 [[ ]] 的区别:

1、解析阶段:根据 shell 内置的语法解析关键字,构建语法。如:识别到 [[ ]] 是一个关键字,它就知道里面的 < > 不是重定向,是比较运算符

2、参数展开:如 变量展开、命令替换这些会把他们展开为实际的字符串形式。

3、分词处理:如果字符串没有加引号,则按 $IFS 定义的分隔符来切割得到多个词

4、路径扩展:进行分词处理后的字符串,如果里面有通配符,就会被通配符扩展为具体的文件名

5、移除引号:如果字符串是使用 单引号 或 双引号 保护的,这个步骤会把引号移除掉。

6、查找命令:如果是内部命令,直接执行,如果是外部命令,根据PATH变量从左到右找。

7、命令执行:若存在字符串参数,就将解析后的字符串做为参数传递给这个命令。


[ ] 和 [[ ]] 的具体区别

1、[ ] 中使用 > 或 < 符号时,需要使用转义字符或加引号,在[[ ]] 中使用不用。

  • [[ ]] 是 Shell 的语法结构(关键字),在解析阶段就知道 < > 是字符串比较符,不会当重定向处理。
  • [ ] 是命令(test 的别名),在执行前会经过重定向解析,因此 < > 会被当作重定向符,必须转义:

2、 [[ ]] 支持正则表达式,使用 =~ 可以写正则表达式,默认就支持扩展正则。例如:[[ "abc123" =~ [a-z]+[0-9]+ ]]

3、 [[ ]] 中的变量或命令替换后,替换后的字符串原样输出,不会进行IFS分词和通配符路径扩展。

4、 未加引号的通配符,在[ ] 和 [[ ]] 中的行为不通,[[ ]] 是模式匹配,[ ] 是通配符扩展。

模式匹配和通配符扩展的区别:例如:[[ "file1" == file* ]] 和 [ "file1" = file* ]

模式匹配:匹配字符串,不会查找文件系统。如:[[ "file1" == file* ]] :* 只是会表示任意字符,所以返回true
路径扩展:通配符路径扩展,会查找文件系统文件名。如:[ "file1" = file* ]:file* 会拓展为当前路径下所有以 file 开头的文件名

相关新闻

  • 分库分表中间件集合
  • ToDesk 360帧超高清远程控制,开启游戏与应用中心抢先体验!
  • 2025全新发布!多场景水处理设备性能推荐清单

最新新闻

  • Clawdbot本地AI网关:绿联NAS上的数字员工部署指南
  • SPI通信协议深度解析:时序、错误处理与实战配置
  • TradingAgents-CN:可审计的金融AI Agent工程化部署指南
  • 终极指南:如何用免费开源工具轻松抢到B站会员购热门门票
  • 无锡家电维修平台推荐:本地用户反馈较好的几家服务商深度实测对比——2026年6月最新发布 - 一步到家
  • Web自动化测试工具全解析:从Selenium到Playwright的实战选型指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号