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

125、【OS】【Nuttx】【周边】效果呈现方案解析:分号与换行

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

之前 blog
【OS】【Nuttx】【周边】效果呈现方案解析:查找最新构建件(补充)
分析完了查找最新构建件的命令,并且分析了 if 语句的基本用法,下面沿着思路继续分析

分号与换行

    # 如果找到了文件if [ -n "$file_mtime" ]; then# 使用 awk 比较浮点数if awk "BEGIN {exit !($file_mtime > $max_mtime)}"; thenmax_mtime=$file_mtimelatest_dir=$dirfifi

首先,这里还有个细节,之前 POSIX 标准描述了 if 条件语句的结构如下
在这里插入图片描述
可以看到这里的结构中,compoud-list 命令列表后面并没有分号,而方案中的 if compoud-list 后面,是有分号的
在这里插入图片描述

这里分号等价于换行,POSIX 标准用换行表示命令结束,可以看到在 POSIX 标准里面 if 条件语句的描述,compoud-list 后面虽然没有分号,但是 then 却换了一行,表示新命令的开始,所以这里用分号 ; 是为了把 then 放在和 if compoud-list 同一行,两者完全等价,只是写法不同

实际上,这种等价关系是个通用规则,Shell 解析器会把分号 ; 和换行等价处理,比如前面分析的 while do done 类型结构,也是一样
在这里插入图片描述
在 POSIX 规范对 While 循环的描述中
在这里插入图片描述
while compoud-list-1 后面也是先换行,再接 do 关键字的,而如果想把 then,do 等关键字和前面的 if,while 等命令放在同一行,就必须用分号 ; 分隔

下面有个简单的小实验,在终端中输入

if true

Bash 进入交互模式,等待用户输入更多信息
在这里插入图片描述
接着输入

then

继续等待
在这里插入图片描述
输入要执行的命令

echo "that is true"

提示继续输入
在这里插入图片描述
输入 fi 表示结束

fi

此时 Bash 终端中执行动作(因为条件判断是 true,恒为真),打印出 that is true 字符串
在这里插入图片描述
注意,这里交互的时候,全程没有输入分号 ; ,仅靠交互时的换行对命令进行分割,但是在终端查看之前输入的命令时,可以惊奇的发现,Shell 对前面输入的这么多命令,自动加上了分号 ; 进行分割,因为 Shell 要将这些命令都汇聚到一行以内显示出来,根据分号 ; 和换行等价规则,Shell 进行了等价替换
在这里插入图片描述

系统错误码

最后再分析下 if 条件语句中的另一个细节
在这里插入图片描述
这里描述当 compoud-list 命令执行返回 0 时,将执行 then 后面的 compoud-list 命令,在 POSIX 规范中,0 一般用来表示命令执行成功,这也是操作系统层面的一个通用约定,Advanced Bash-Scripting Guide 《高级 Bash 脚本编程指南》这里有总结
在这里插入图片描述
在 Bash 中,0 表示成功,其他数字表示错误原因,这也是为了和 C/C++ 标准保持一致

终端输入

cat /usr/include/sysexits.h

可以看到在系统层面的一些错误码
在这里插入图片描述
可以看到在操作系统,C 规范中,E_OK 也是 0,表示命令执行成功

ok,先到这里,下篇 blog 继续

http://www.dtcms.com/a/389958.html

相关文章:

  • CBB21-MPP电子元器件 RC容钏 金属化聚丙烯薄膜电容器 电子元器件技术解析
  • Day02 递归 | 46. 全排列、226. 翻转二叉树
  • [Spring Cloud][6] Eureka Server 搭建详解,与 Zookeeper 的区别
  • 前端性能优化完全指南:从入门到实战
  • 国产组态软件对工控行业的影响及作用
  • Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
  • 从把python里的一个函数变成接口到自动化测试平台的实现
  • LibreTV+cpolar:打造私人云影院的智能方案
  • 软考高级系统架构设计师之架构设计扩展篇(一)
  • 宝德PR1710P服务器安装Anolis8.6系统
  • ABAP读写SAP服务器文件
  • 无人机操控核心:智能飞行的技术引擎
  • H5页面在真机移动端1px边框处理方案总结
  • 本地大模型部署与应用: Dify 与 Ollama 集成
  • 从 “盲调” 到 “精准优化”:SQL Server 表统计信息实战指南
  • ffmpeg.dll是什么?4步彻底解决ffmpeg.dll丢失报错问题
  • ROS2C++核心基础
  • 第二篇:搭建现代C++开发环境:VS2022 / CLion / VSCode实战
  • 【群晖NAS】一键脚本搭建frp内网穿透,在外轻松远程访问内网设备|远程桌面
  • 【HTML】 第一章:HTML 基础
  • 【RAG】知识库问答不是只有 RAG
  • 前端缓存深度解析:localStorage 到底是同步还是异步?
  • Vue2 基础知识点二:事件绑定 (Event Binding)
  • ​​[硬件电路-250]:LDO电源核心指标、典型问题与工程实践指南
  • 论文笔记(九十二)RLVR-World: Training World Models with Reinforcement Learning
  • 驾校培训办公管理系统 专属驾校的OA系统 驾培管理行业
  • 绿色纺织品的国际通行证:GRS认证的深度解析
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘cryptography’ 问题
  • Linux网络:应用层http
  • 基于GeoDa与R语言的空间数据回归实践技术应用