$?,$(),[],[[]],=,==,exit
文章目录return退出函数回到调用函数的地方。exit退出整个 Shell 脚本。$? 表示最近执行完成的那一条命令的退出状态/退出码exit status 或 exit code函数退出码脚本退出码Shell 规定如果赋值中包含命令替换 $(...)那么整个赋值命令的退出码就是命令替换中最后一个命令的退出码。$()命令替换。$(命令) 执行这个命令并用这个命令的标准输出stdout替换掉原来的 $(命令)怎么知道命令的标准输出是什么函数和脚本通过 $() 调用时会把执行过程中产生的所有标准输出stdout收集回来。echo 只是最常见产生 stdout 的方式${} 是变量展开parameter expansion作用是取变量的值或者对变量做一些处理最基本取变量值$NAME 和 ${NAME} 有什么区别: :-,:没设置(unset)为空(empty)指 变量的值是空字符串 已设置(set)${VAR:-word}${VAR:word}${VAR:word}[]是什么整个条件表达式都会返回退出码0 → 条件成立真非 0通常是 1→ 条件不成立假[ 为什么后面必须空格[[ ]] 是 Bash/Zsh 的增强版条件判断。整个条件表达式都会返回退出码0 → 条件成立真非 0通常是 1→ 条件不成立假[ ] 和 [[ ]] 最大区别变量为空时通配符匹配右侧没有引号逻辑符号数字比较Shell 里的变量没有类型默认都是字符串。,[],[[]]里比较字符串模式匹配,右边没有引号,在[[]]里还可以表示模式匹配模式匹配右边没有双引号。只有 [[ ]] 的 支持模式匹配-n -z-n字符串长度不为 0非空,non-zero length长度不是0-z字符串长度为 0为空.zero length长度为0return退出函数回到调用函数的地方。exit退出整个 Shell 脚本。return返回到调用函数的地方退出的是函数。exit返回给操作系统退出的是整个脚本/整个 Shell 进程$? 表示最近执行完成的那一条命令的退出状态/退出码exit status 或 exit code$?保存的是上一条命令的退出状态码0通常表示成功。非 0表示失败或其他状态具体含义由命令定义。需要注意的是$? 每执行一条新命令都会立即更新$?是一个特殊变量用来保存上一条命令包括外部命令、Shell 内建命令、Shell 函数调用、脚本执行等的退出状态退出码函数退出码函数退出码如果函数执行了return n那么函数的退出码就是n。如果函数没有执行return那么函数的退出码就是函数中最后执行的一条命令的退出码。脚本退出码脚本退出码如果脚本执行了exit n那么脚本立即结束退出码就是n。如果脚本没有执行exit那么脚本退出码就是脚本最后执行的一条命令的退出码。Shell 规定如果赋值中包含命令替换 $(…)那么整个赋值命令的退出码就是命令替换中最后一个命令的退出码。带命令替换的赋值命令其退出码就是命令替换中最后执行命令的退出码false 是 Shell 中最简单的一个工具无论它是 /bin/false 可执行文件还是 Shell 内置命令它的唯一目的就是向系统报告失败。true 命令除了返回退出码 0 之外什么都不做。false 命令除了返回退出码 1 之外什么都不做。$()命令替换。$(命令) 执行这个命令并用这个命令的标准输出stdout替换掉原来的$(命令)$(命令) 执行这个命令并用这个命令的标准输出stdout替换掉原来的 $(命令)怎么知道命令的标准输出是什么方法就是直接运行这个命令看它正常产生的结果这个结果默认就是 stdout$() 会拿这个 stdout 作为替换内容函数和脚本通过 $() 调用时会把执行过程中产生的所有标准输出stdout收集回来。echo 只是最常见产生 stdout 的方式${} 是变量展开parameter expansion作用是取变量的值或者对变量做一些处理${} 是变量展开parameter expansion作用是取变量的值或者对变量做一些处理。而$() 是执行命令拿命令输出。最基本取变量值$NAME 和 ${NAME} 有什么区别: :-,:这几个都是 ${} 里面对变量进行操作的语法。${变量 操作符 值}写法含义${VAR:-word}如果 VAR没设置或为空使用 word${VAR:word}如果 VAR没设置或为空给 VAR 赋值 word并使用 word. 即${VAR:word} word且varword${VAR:word}如果 VAR已设置且非空使用 word否则为空空字符串没设置(unset)没设置unset 当前 Shell 环境中不存在这个变量。这个情况可能是从来没有创建过之前创建过但是后来 unset 删除了。这两种最终状态是一样的变量不存在。为空(empty)指 变量的值是空字符串 “”已设置(set)已设置set 这个变量在当前 Shell 环境中已经存在已设置 Shell 当前能找到这个变量不管它是你写的 varxx还是环境变量传进来的${VAR:-word}${VAR:word}${VAR:word} 等价于 ${VAR:word} word且varword含义如果 VAR 没设置或者为空给 VAR 赋值 word然后使用 word。重点会修改 VAR。${VAR:word}含义如果 VAR 已设置并且非空就使用 word否则为空空字符串。注意它不是返回 VAR。而是VAR 有值 → 返回你写的 word VAR 没值 → 返回空[]是什么整个条件表达式都会返回退出码0 → 条件成立真非 0通常是 1→ 条件不成立假[ ] 和 [[ ]] 返回真假本质上就是判断里面写的条件如果条件成立 → 返回 0真如果条件不成立 → 返回非 0假。Shell 里比较特殊0 真非 0 假和很多编程语言正好相反[] 实际上是一个命令[ 条件 ]等价于test 条件[ 为什么后面必须空格[[ ]] 是 Bash/Zsh 的增强版条件判断。整个条件表达式都会返回退出码0 → 条件成立真非 0通常是 1→ 条件不成立假[ ] 和 [[ ]] 返回真假本质上就是判断里面写的条件如果条件成立 → 返回 0真如果条件不成立 → 返回非 0假。Shell 里比较特殊0 真非 0 假和很多编程语言正好相反[ ] 和 [[ ]] 最大区别变量为空时[ ] 会先进行 Shell 的变量替换然后把替换后的内容作为 [ ] 命令的参数。[[ ]] 是 Shell 自己解析的语法不会把空变量展开后破坏结构通配符匹配右侧没有引号逻辑符号数字比较[[ ]] 数字比较和[]一样符号含义-eq等于-ne不等于-gt大于-lt小于-ge大于等于-le小于等于Shell 里的变量没有类型默认都是字符串。Shell 里的变量没有类型默认都是字符串。但是 Shell 提供了“把字符串里的内容当数字处理”的比较运算。也就是说变量本身没有数字类型但是比较时可以进行数字比较。Shell 变量没有数字类型但比较时可以使用 -eq/-gt/-lt 等操作符把变量内容按数字解释,[],[[]]里比较字符串 和 在字符串比较场景下表示“字符串是否相等”。但是注意 不是 POSIX 标准 [ ] 写法但是在 [[ ]] 中 还有额外功能支持模式匹配pattern matching。模式匹配,右边没有引号,在[[]]里还可以表示模式匹配模式匹配右边没有双引号。只有 [[ ]] 的 支持模式匹配模式匹配pattern matching 可以理解为不是判断两个字符串是否完全一样而是判断一个字符串是否符合某个“规则”。-n -z-n、-z 是 Shell 条件判断里的字符串测试操作符。它们通常用在[ 条件 ]或者[[ 条件 ]]里面。作用是判断字符串是否为空。-n字符串长度不为 0非空,non-zero length长度不是0-n 判断字符串长度是否大于 0。长度不为 0 → 条件成立 → 返回退出码 0长度为 0 → 条件不成立 → 返回退出码 1[]里需要加引号[[]]里可以不加不是 -n返回 0/1而是整个 [ -n “$VAR” ] 条件判断命令返回 0/1。-n 本身只是一个判断操作符。-z字符串长度为 0为空.zero length长度为0-z 判断字符串长度是否等于于 0。等于 0 → 条件成立 → 返回退出码 0不等于 0 → 条件不成立 → 返回退出码 1[]里需要加引号[[]]里可以不加不是 -z 返回 0/1而是整个 [ -z “$VAR” ] 条件判断命令返回 0/1。-z 本身只是一个判断操作符。

相关新闻

iSCSI存储技术解析与实战部署指南

iSCSI存储技术解析与实战部署指南

1. 为什么需要iSCSI存储?在虚拟化环境和分布式系统中,存储性能往往成为整个架构的瓶颈。传统直连存储(DAS)受限于物理连接,而光纤通道(FC)SAN虽然性能优异但成本高昂。iSCSI协议正是在这种背景下…

2026/10/12 2:29:38 阅读更多 →
从零上手Coze:6大实战项目带你玩转AI智能体开发

从零上手Coze:6大实战项目带你玩转AI智能体开发

最近在尝试将AI能力集成到实际业务中时,你是否也遇到过这样的困境:想快速搭建一个智能客服或内容助手,却苦于需要从零学习复杂的模型训练和部署?面对市面上琳琅满目的AI开发平台,不知如何选择?好不容易选定…

2026/10/11 4:52:12 阅读更多 →
Unity与Vuforia开发AR射箭游戏:从物理交互到解决穿模问题

Unity与Vuforia开发AR射箭游戏:从物理交互到解决穿模问题

1. 项目概述:为什么选择Unity 2019.3.9f1与Vuforia构建AR射箭游戏? 如果你正在寻找一个能融合物理交互、3D视觉和移动端部署的AR实战项目,那么用Unity和Vuforia开发一款射箭游戏绝对是个绝佳的选择。这个组合之所以经典,是因为它…

2026/10/12 3:22:09 阅读更多 →

最新新闻

SpringBoot整合MyBatis实战:从配置到原理,常见问题全解析

SpringBoot整合MyBatis实战:从配置到原理,常见问题全解析

1. 项目概述与核心价值这块内容的核心就是解决一个很实际的问题:怎么让 SpringBoot 项目和 MyBatis 顺利“牵手”。很多刚开始接触这套组合的朋友,最直观的感受是“配置怎么这么多”“为什么我的 Mapper 接口扫不到”“明明 SQL 没问题但就是报错”。这很…

2026/10/12 3:22:59 阅读更多 →
remocn一次性讲透27种Remotion场景转场:从硬切到Shader擦除

remocn一次性讲透27种Remotion场景转场:从硬切到Shader擦除

【免费下载链接】remocn Production-ready animations, transitions, backgrounds, and scenes for Remotion 项目地址: https://gitcode.com/gh_mirrors/re/remocn 点击查看 免费下载 remocn 是一个面向 Remotion 的复制粘贴式动效组件库,它的 Transit…

2026/10/12 3:22:59 阅读更多 →
interview-go 仓库导读:Golang 面试题知识体系与实战解析指南

interview-go 仓库导读:Golang 面试题知识体系与实战解析指南

文档教程后端 【免费下载链接】interview-go golang面试题集合https://interview.disign.me/ 项目地址: https://gitcode.com/gh_mirrors/in/interview-go 点击查看 免费下载 本文以 interview-go 仓库的导航文档 docs/README.md 为骨架,系统梳理这份「…

2026/10/12 3:22:58 阅读更多 →
LiteLLM实战:统一多模型接入与网关部署的完整指南

LiteLLM实战:统一多模型接入与网关部署的完整指南

近一两年做 AI 应用,最让我头疼的往往不是模型本身的能力,而是“怎么把各个模型顺畅地接进自己的代码”。每家模型服务商的接口风格都不同,有的偏好流式事件,有的用完全不一样的鉴权方式,有的连请求字段和返回结构都有…

2026/10/12 3:22:58 阅读更多 →
Oat UI 数据表格(Table)组件实战:零依赖语义化表格与源码级样式解析

Oat UI 数据表格(Table)组件实战:零依赖语义化表格与源码级样式解析

【免费下载链接】oat Ultra-lightweight, zero dependency, semantic HTML, CSS, JS UI library. ~10KB mingz. 项目地址: https://gitcode.com/gh_mirrors/oat5/oat 点击查看 免费下载 Oat 是一个超轻量、零依赖的语义化 HTML/CSS/JS UI 库(约 10KB mi…

2026/10/12 3:22:58 阅读更多 →
具身智能中的无线技术——无线线束1

具身智能中的无线技术——无线线束1

无线线束是具身智能领域的颠覆性技术&#xff0c;通过用无线电波替代机器人内部的信号线&#xff0c;解决线缆易断、重量大、灵活性受限等问题。其核心在于实现低时延&#xff08;<20μs&#xff09;、高可靠性、抗干扰的无线通信&#xff0c;已在灵巧手、触觉皮肤和电池管理…

2026/10/12 3:21:58 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →