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

shell中[] [[]] (())比较

符号[] 或 test[[]](())
边界空格需要需要不需要
整数比较-eq -gt -lt -ge -le-eq -gt -lt -ge -le= 、>、 <、 >= 、<=
字符串比较=、==、!==、==、!==、==、!=
与或非运算符-a 、-o、!&&、||、!&&、||、!
支持正则不支持支持不支持
定位base其实是[]的字符串表达式增强版其实是[]的数值表达式的增强版
实际应用
整数比较[ 10 > 9 ] ## 代表重定向[[ 10 > 9 ]] 部分bash版本才支持,不建议使用echo $((3>2)) #1 为真
字符串比较[ “abc” = “abc” ] # 0
[ “abc” != “ABC” ] # 0
[[ “abc” = “abc” ]] # 0
[[ “abc” != “ABC” ]] # 0
[[ abc = ab? ]] # 0
计算$[10+2] # 12$((10+2)) #12
其它[ -n “$var” ][[ -n $var ]]

关于最后一行的区别是,[[]]中不会进行分词和文件名展开,举个例子来说:

test@test-PC:~$ [ -n $var ]
test@test-PC:~$ echo $?
0
test@test-PC:~$ [[ -n $var ]]
test@test-PC:~$ echo $?
1

-n用于判断变量是否为空,若为空,则为假,echo $? 应该为1。但是上面代码中我没有定义var变量,echo $?却为0。这是因为[]会发生分词,将$a(空值)移除,相当于[-n],而[]中仅有一个参数且非空时会认为“真”,造成了这个小bug。
但是用 [[]] 不会出现此bug,或者[ -n “$var”] 将变量加上双引号。

小结

  1. test命令和[]完全一样,整数比较建议使用[ -gt ] ;
  2. 字符串比较建议用[[ ]],=和==功能等同;
  3. 数值计算建议用(()) ;

http://www.kler.cn/a/427493.html

相关文章:

  • 5.12【机器学习】卷积模型搭建
  • 【UE5】制作插件 并调试【vs2022】
  • android studio 读写文件操作(应用场景三)
  • zabbix监控服务的搭建与使用
  • SpringCloud-Eureka与Dubbo(Zookeeper)的深度对比:微服务架构下的服务注册与发现
  • k8s-Informer之Indexer的解析(4)
  • 循序渐进kubenetes Service(Cluster ip、Nodeport、Loadbalancer)
  • 简易图书管理系统
  • 16 Java(junit)测试+Assert(断言测试)、枚举类、注解、javac编译和javap反编译命令、常量
  • 夏普MX-4608N复印机维修模式进入方法及载体初始化方法
  • 基于STM32的Wi-Fi无人机项目
  • 手写电子签名并保存到当前项目下
  • 【Spark】 groupByKey与reduceByKey的区别
  • Conda-Pack打包:高效管理Python环境
  • 安全生产培训题库200道;免费题库;大风车题库
  • ArrayList 底层结构和源码分析/注意事项
  • 基于Java Springboot环境保护生活App且微信小程序
  • 代码随想录-算法训练营day42(动态规划05:最后一块石头的重量2,目标和,一和零)
  • AttributeError: module numpy has no attribute int .报错解决
  • API设计指南:详解HTTP状态码错误解析、HTTP方法及参数命名规则