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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/205014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析AI智能视频监控技术在城市交通中的作用及意义

城市交通作为整个城市的整体脉络&#xff0c;每天都发挥着重要作用&#xff0c;为了最大程度地避免城市交通堵塞、提高城市交通效率&#xff0c;智能视频监控系统发挥了重要作用。具体表现在以下几个方面&#xff1a; 1、交通违规监管&#xff1a;TSINGSEE青犀智能视频监控系统…

【JavaScript】JS——Map数据类型

【JavaScript】JS——Map数据类型 什么是Map?特性Map与Object的比较 map的创建map的属性map相关方法map的遍历 什么是Map? 存储键值对的对象。 能够记住键的原始插入顺序任何值&#xff08;对象或原始值&#xff09;都可以作为键或值。 特性 Map中的一个键只能出现一次&am…

【三维重建】多频外差相位展开(C++实现)

在结构光三维重建中&#xff0c;通过相移法求解出来的相位是包裹相位&#xff08;在 [&#xff0d;π/2,π/2] 间成周期性 &#xff09; 我们想要用相位找到相机与投影仪间的对应像素&#xff0c;就需要进行相位展开&#xff0c;确保每一行的相位值是唯一的。 多频外差是相位…

JVM虚拟机(已整理,已废弃)

# JVM组成 ## 简述程序计数器 线程私有&#xff0c;内部保存class字节码的行号。用于记录正在执行的字节码指令的地址。 线程私有-每个线程都有自己的程序计数器PC&#xff0c;用于记录当前线程执行哪个行号 ## 简述堆 ## 简述虚拟机栈 ## 简述堆栈区别 ## 方法内局部变量是…

SRC挖掘漏洞XSS

Markdown是一种轻量级标记语言&#xff0c;创始人为约翰格鲁伯&#xff08;John Gruber&#xff09;。它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的 XHTML&#xff08;或者HTML&#xff09;文档。这种语言吸收了很多在电子邮件中已有的纯文本标记的…

Ubuntu宝塔面板本地部署轻论坛系统HadSky并远程访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 前言 经过多年的基础…

5.C转python

新始: 13.列表可被改变(数据),元组不可被改变(数据),二者皆与C中的数组的大致相同 14.创建列表方法: 1.一个[ ]就是一个空的列表 2.使用list函数来创建列表 如: 15.可以在[ ]内部指定列表的初始值,打印方法: 如: 16.在python中,在同一个列表中,可以放不同类型的变量(也可…

Vector Quantized Diffusion Model for Text-to-Image Synthesis

Vector Quantized Diffusion Model for Text-to-Image Synthesis Shuyang Gu, University of Science and Technology of China, Microsoft, CVPR2022, Cited: 340, Code, Paper 1. 前言 我们提出了用于文本到图像生成的矢量量化扩散(Vector Quantized Diffusion Model&…

银河麒麟服务器部署Prometheus+Grafana

#年薪百万# 一、环境准备 操作系统&#xff1a;Operating System: Kylin Linux Advanced Server V10 (Sword) (X86-64) prometheus&#xff1a;prometheus-2.48.0.linux-amd64 grafana&#xff1a;grafana-enterprise-10.2.2.linux-amd64 node_exporter&#xff1a;node_expor…

C语言指针——野指针

目录 概念 原因 1、指针未初始化 2、指针越界访问 3、指针指向的空间释放 如何规避野指针 1、指针初始化 (1)、不知道指针初始化什么地址时&#xff0c;直接初始化为NULL (2)、明确知道初始化的值 2、小心指针越界 3、指针指向空间释放即时置NULL 4、指针使用之前检查…

uni-app 微信小程序之自定义中间圆形tabbar

文章目录 1. 自定义tabbar效果2. pages新建tabbar页面3. tabbar 页面结构4. tabbar 页面完整代码 1. 自定义tabbar效果 2. pages新建tabbar页面 首先在 pages.json 文件中&#xff0c;新建一个 tabbar 页面 "pages": [ //pages数组中第一项表示应用启动页&#xff…

Day44| Leetcode 518. 零钱兑换 II Leetcode 377. 组合总和 Ⅳ

今天进入完全背包。 Leetcode 518. 零钱兑换 II 题目链接 518 零钱兑换 II 由于是可以选取多个元素&#xff0c;所以是完全背包&#xff0c;要注意在遍历顺序中前序遍历&#xff0c;其他的和前面的目标数这个题目类似&#xff0c;要理解dp[j]dp[j-nums[i]]的来源。&#xff…

Nmap脚本的安全性

Nmap脚本的安全风险和漏洞 Nmap脚本&#xff08;Nmap Scripting Engine&#xff0c;NSE&#xff09;是一款功能强大的网络扫描工具&#xff0c;可以通过编写自定义脚本来扩展其功能&#xff0c;实现更加精细的渗透测试。然而&#xff0c;在使用Nmap脚本时&#xff0c;也存在一些…

hive sql子单元查找组合单元信息

1. 背景 店铺卖东西&#xff0c;会将一部分子商品&#xff08;单个商品&#xff0c;sku 粒度&#xff09;打包到一起&#xff0c;变成一个组合商品去售卖。 用户买东西&#xff0c;可能会买多个组合商品。 数仓这边拿到的数据&#xff0c;全是已经拆分到子商品的订单商品数据…

Ubuntu宝塔面板本地部署Emlog个人博客网站并远程访问【内网穿透】

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

DDoS高防IP到底是什么?

DDoS高防IP是提供一个带防御的IP&#xff0c;主要是针对网络中的DDoS攻击进行保护&#xff0c;是针对互联网服务器遭受大流量的DDoS攻击后&#xff0c;导致服务不可用的情况下&#xff0c;用户可以通过配置高防IP&#xff0c;将攻击流量引流到高防IP上&#xff0c;从而确保源站…

面试华为测试岗,收到offer后我却毫不犹豫拒绝了....

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是2年。我想说的是&#xff0c;但凡有点机会&#xff0c;千万别去外包&#xff01; 在深思熟虑过后&am…

圣诞将至—C语言圣诞树代码来啦

文章目录 圣诞将至—C实现语言圣诞树源码 圣诞将至—C实现语言圣诞树 圣诞树 源码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <math.h> #include <stdlib.h> #include <windows.h> #include <time.h> #define PI 3.14159265…

电磁继电器应用要点及保持与自锁技术经验总结

🏡《电子元器件学习目录》 目录 1,概述2,电磁继电器2.1,结构与原理2.2,分类3,磁保持继电器结构与工作原理4,自锁继电器结构与工作原理5,总结1,概述 继电器是一种通过小电流控制大电流运作的自动开关。其具有放大控制信号,扩大控制范围,综合信号和遥控监测的功能。继…

基于curl 使用http多线程下载大文件

一、获取文件大小 int64_t CHttpClient::GetFileSize(const std::string &url) {auto curl curl_easy_init();if (!curl){curl_easy_cleanup(curl);return -1;}double filesize -1; //文件大小curl_easy_setopt(curl,CURLOPT_URL, url.c_str());curl_easy_setopt(curl, …