Shell脚本精读 · S13-01 | POSIX sh 与 Bash:语法对照表
模块S13 可移植性与规范篇号S13-01 / 42预计阅读50 分钟主线Bash对照 POSIXsh文章目录本篇目标30 秒速览正文1. 先看清 shebang2. POSIX sh 与 Bash 关系够用理解3. 总对照表语法4. 条件表达式最常踩坑4.1 [ vs [[4.2 整数比较4.3 组合条件5. 参数展开6. 循环与控制7. 函数与作用域8. set 选项9. 读脚本红旗列表10. 何时选 sh、何时选 Bash11. 从 Bash 迁到 sh 的替换思路预览12. 与 ShellCheck读脚本检查清单练习判断题改错题对照题下一篇预告本篇目标建立POSIX sh与Bash的语法对照读到#!/bin/sh却满篇[[、(( ))时能判断风险写脚本时能决定坚持 POSIX还是明确 Bash。本篇是对照表编写清单与command/printf在S13-02。30 秒速览POSIX sh各系统上的/bin/sh可能是dash、bash 的 posix 模式等语法最小公共子集。Bash扩展多——[[、(( ))、数组、{1..10}、pipefail、进程替换等。shebang 与内容要一致#!/bin/sh里不要写 Bash 专用语法。可移植优先[、test、$(( ))、printf、.、getopts。本专栏主线是Bash需要sh时查本篇 S13-02。正文1. 先看清 shebang第一行含义#!/bin/sh用系统sh解释不保证是 Bash#!/usr/bin/env bash明确要Bash专栏推荐#!/bin/bashBash路径写死部分系统无此路径读脚本第一问第一行承诺的运行时是否支持下文里的 Bash 语法#!/bin/shif[[-f$f]];then# 错[[ 不是 POSIX常见情况作者本机/bin/sh指向 bash脚本在dash/Alpine busybox sh上直接报错。2. POSIX sh 与 Bash 关系够用理解POSIX标准文档规定 shell 语法子集。实现Linux 上sh常为dashDebian/Ubuntu或bash --posixmacOS 曾长期不同。Bash超集bash script.sh可跑 Bash 语法sh script.sh只能跑 POSIX加实现少量扩展。专栏策略教学用 Bash交付若要求sh按本篇改写法。3. 总对照表语法特性POSIX shBash专栏条件if [ ]✅✅S05-01[[ ]]❌✅S05-03正则~❌✅[[ ]]S05-03模式 *.log❌✅[[ ]]S05-03算术测试(( ))❌✅S05-04[ $n -eq 10 ]✅✅S05-01let部分✅S05-04function f()❌f()可以✅S08-01local❌✅S08-02数组arr( )❌✅S03-04${arr[]}❌✅S03-04${var:0:5}子串❌✅S03-02${var:-def}部分POSIX 有子集✅S03-02for i in {1..10}❌✅S07-01for (( ))❌✅S07-01select❌✅S08-04getopts✅✅S08-04source❌用.✅ 同.S08-03$(cmd)✅✅S09-03进程替换( )❌✅S09-04set -o pipefail❌✅S01-04、S09-02PIPESTATUS❌✅S09-02重定向❌✅S09-01here-string❌✅S09-01[[内—✅S05-03echo -e不可移植常用用printfS13-02read -r✅✅S07-02trapEXIT部分✅S11-01flock非 POSIX 命令常见S11-02timeout非 POSIX 命令GNUS11-024. 条件表达式最常踩坑4.1[vs[[# POSIXif[$a$b];thenif[-f$file];then# Bash onlyif[[$a$b]];thenif[[$f*.log]];then4.2 整数比较# POSIX[$n-eq10]# Bash脚本内常用但 sh 不行((n10))4.3 组合条件# POSIX两个 [ 或 -a不推荐 -a[$ax][$by]# Bash[[$ax$by]]5. 参数展开写法POSIX shBash$1$✅✅${var:-def}✅✅${var:def}✅✅${#var}✅✅${var#prefix}❌✅${var/pat/rep}❌✅数组${a[]}❌✅写#!/bin/sh时避免S03-02里 Bash 专有展开S13-02 给替代写法。6. 循环与控制# POSIXforfin$;dowhile[$n-lt10];don$((n1))done# Bash onlyforiin{1..10};dofor((i0;i10;i));dobreak/continuePOSIX 均有。7. 函数与作用域# POSIX 函数myfunc(){echo$1}# Bash 扩展myfunc(){localx1declare-in0}export -fBash非 POSIX。8.set选项选项POSIX shBashset -e✅✅set -u部分✅set -o pipefail❌✅set -x✅✅#!/bin/shset -euo pipefail在dash上-u通常可用pipefail不可用ShellCheckSC3043。9. 读脚本红旗列表见到#!/bin/sh或dash却出现[[(( )){1..10}source应用.数组、${var//x/y}( )select→要么 shebang 错了要么脚本在部分系统会挂。应改为#!/usr/bin/env bash或改写成 POSIXS13-02。见到#!/usr/bin/env bash可合理使用专栏全部 Bash 特性。10. 何时选 sh、何时选 Bash选POSIX sh选Bash嵌入式/极简 rootfs开发机、CI、团队统一 Bash明确要求dash兼容需要数组、[[、pipefail被sh调用的极小片段复杂逻辑、运维工具专栏默认不要假设「sh 就是 bash」。11. 从 Bash 迁到 sh 的替换思路预览BashPOSIX 倾向[[ -f f ]][ -f f ](( $# 1 ))[ $# -lt 1 ][[ $x *.log ]]case $x in *.log)${s#pre}sed/expr笨但可移植source f. fpipefail拆开管道或显式查$?细节与command/printf在S13-02。12. 与 ShellCheckshellcheck-sshscript.sh# 按 POSIX 扫shellcheck-sbashscript.sh# 按 Bash 扫shebang 与-s一致。见S12-02。读脚本检查清单第一行shebang与文内语法是否一致#!/bin/sh下是否误用[[、数组、pipefail需要模式匹配时sh 是否改用case整数比较是否用-eq而非(( ))在 sh 脚本里是否用printf代替echo -eS13-02练习判断题#!/bin/sh保证脚本在所有 Unix 上由 Bash 执行。[[是 Bash 扩展不是 POSIX。getopts可在 POSIX sh 脚本中使用。set -o pipefail在所有/bin/sh实现上都可用。读脚本时 shebang 与语法冲突应优先信语法还是信 shebang——应让它们一致。参考答案错。对。对。错。应一致冲突时按更严格的 sh 理解或改 shebang。改错题下面脚本声称兼容sh请指出 Bash 专有写法#!/bin/shset-euopipefailfiles($)[[${#files[]}-lt1]]exit2source./lib.shforiin{1..3};do[[$i~^[0-9]$]]run$idone参考答案数组files( )、${#files[]}[[、~、模式pipefaildash sh 不行source→.{1..10}应改为#!/usr/bin/env bash或逐项 POSIX 化S13-02。对照题将下列 Bash 改为POSIX[/test风格不要求可运行表达即可[[ -f $f -r $f ]](( $# 1 ))[[ $x *.log ]]参考答案[ -f $f ] [ -r $f ][ $# -ge 1 ]case $x in *.log) ... ;; esac或[ -f $x ]等按语义改写下一篇预告S13-02《可移植脚本编写清单与command/printf》— 实战 checklist、command -v、避免echo陷阱完成 S13 模块。

相关新闻

STM32F103 ADC 12位配置实战:单通道与多通道采样,误差控制在±0.01V

STM32F103 ADC 12位配置实战:单通道与多通道采样,误差控制在±0.01V

STM32F103 ADC 12位配置实战:单通道与多通道采样精度优化指南1. 硬件设计基础与误差源分析在嵌入式传感器数据采集系统中,ADC精度直接影响最终测量结果的可靠性。STM32F103C8T6内置的12位逐次逼近型ADC理论上具有1LSB的理想精度,但实际应用中…

2026/7/10 7:58:22 阅读更多 →
STM32定时器输入捕获:高精度频率测量原理与HAL库实现

STM32定时器输入捕获:高精度频率测量原理与HAL库实现

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在调试一个电机控制项目时,遇到了一个看似简单却让人头疼的问题:如何准确测量电机转速反馈信号的频率。最…

2026/7/10 7:54:21 阅读更多 →
AI发展分水岭:从数据驱动迈向原理驱动的新范式

AI发展分水岭:从数据驱动迈向原理驱动的新范式

1. 项目概述:一次访谈引发的AI行业思考前几天,DeepMind联合创始人德米斯哈萨比斯(Demis Hassabis)的一段最新访谈在科技圈里刷屏了。访谈的核心观点非常犀利,他认为今年的诺贝尔奖,对于人工智能领域而言&am…

2026/7/10 7:52:20 阅读更多 →

最新新闻

SVPWM 空间矢量调制:从 MATLAB/Simulink 仿真到 STM32 实现,谐波降低 15%

SVPWM 空间矢量调制:从 MATLAB/Simulink 仿真到 STM32 实现,谐波降低 15%

SVPWM空间矢量调制技术:从MATLAB仿真到STM32嵌入式实现的工程实践引言:电力电子调制的技术演进在工业电机控制领域,如何高效精确地驱动三相电机一直是核心技术挑战。传统SPWM(正弦脉宽调制)技术虽然简单易实现&#xf…

2026/7/10 9:00:39 阅读更多 →
从自动化到主动智治:迈克生物携手华为推动医学检验智慧化实验室升级

从自动化到主动智治:迈克生物携手华为推动医学检验智慧化实验室升级

2026年7月8日,迈克生物股份有限公司与华为技术有限公司在华为松山湖园区签署深化合作协议。双方将聚焦数智技术与体外诊断产业深度融合,围绕智慧化实验室、集团全球一朵云、智能制造平台建设及鸿蒙IVD设备联合创新等领域展开深度协作,推动医学…

2026/7/10 8:58:38 阅读更多 →
基于AI Agent与MCP协议的渗透测试辅助工具VulnClaw实战指南

基于AI Agent与MCP协议的渗透测试辅助工具VulnClaw实战指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. VulnClaw 是什么?它能解决什么实际问题? 如果你正在学习或从事网络安全、渗透测试,或者对 AI A…

2026/7/10 8:56:38 阅读更多 →
STM32F429ZI与CMT-8540S-SMT嵌入式音频开发实战

STM32F429ZI与CMT-8540S-SMT嵌入式音频开发实战

1. 为什么选择STM32F429ZI与CMT-8540S-SMT组合 在嵌入式音频开发领域,硬件选型往往决定了项目的上限。STM32F429ZI这颗基于ARM Cortex-M4内核的微控制器,内置了2个专用音频PLL和全双工IS接口,时钟精度可达0.5%。这意味着它能够直接输出符合IS…

2026/7/10 8:52:36 阅读更多 →
C++17 元编程状态机 fsm-cxx 实战:5分钟构建线程安全事件驱动模型

C++17 元编程状态机 fsm-cxx 实战:5分钟构建线程安全事件驱动模型

C17 元编程状态机 fsm-cxx 实战:5分钟构建线程安全事件驱动模型 在嵌入式系统、游戏开发和网络协议栈中,状态机(Finite State Machine, FSM)是管理复杂逻辑的利器。传统实现常伴随冗长的switch-case语句和脆弱的状态转移表&#x…

2026/7/10 8:48:35 阅读更多 →
vLLM 推理优化:部署 Qwen2-7B-NER 模型实现 1000 QPS 的 5 项配置

vLLM 推理优化:部署 Qwen2-7B-NER 模型实现 1000 QPS 的 5 项配置

vLLM推理优化:部署Qwen2-7B-NER模型实现1000 QPS的5项关键技术 在当今AI技术快速发展的背景下,命名实体识别(NER)作为自然语言处理的基础任务,已广泛应用于信息抽取、智能客服和知识图谱构建等领域。然而,将训练好的NER模型高效部…

2026/7/10 8:44:34 阅读更多 →

日新闻

STM32与LTC1864高精度ADC的SPI通信实现

STM32与LTC1864高精度ADC的SPI通信实现

1. 项目背景与核心需求在工业控制和嵌入式系统开发中,模拟信号与数字系统的无缝集成一直是工程师面临的关键挑战。LTC1864作为一款16位高精度ADC转换器,配合STM32F101ZG这类主流微控制器,能够构建高性能的模拟信号采集系统。这种组合特别适合…

2026/7/10 0:03:07 阅读更多 →
猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无法下载而烦恼吗&am…

2026/7/10 0:05:09 阅读更多 →
直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

1. 直流有刷电机驱动方案概述在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,仍然是许多应用场景的首选驱动方案。TC78H653FTG作为东芝推出的新一代H桥驱动器,与MKV46F256VLH16微控制器配合使用&#xff0c…

2026/7/10 0:05:09 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻