Shell脚本精读 · S13-01 | POSIX sh 与 Bash:语法对照表

发布时间:2026/10/22 23:51:31

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 模块。
延伸阅读

更多相关文章

2026/10/22 12:08:26

OpenClaw 2.6.4 Windows零代码部署实战指南

1. 项目概述:这不是“一键安装”,而是 Windows10 上真正可落地的 OpenClaw 零代码部署闭环OpenClaw 2.6.4 这个版本在开发者圈子里最近被反复提起,不是因为它加了什么炫酷的新模型,而是它第一次把“零代码部署”从宣传口号变成了 …

2026/10/21 1:12:27

学校用知网还是维普都要降 AI 率?这样一次降到 20% 以内

学校用知网还是维普都要降 AI 率?这样一次降到 20% 以内 你现在最头疼的,可能不是论文写得好不好,而是根本搞不清学校到底用哪个平台查。同学群里有人说学院走的是知网,有人说答辩前又要过一遍维普,还有人说两个都要传…

2026/10/23 19:11:07

用Python搭建全自动交易系统:从策略回测到稳定运行的完整指南

简介:面向量化交易入门与进阶开发者,这份算法交易资源以Python构建全自动交易系统为主线,覆盖数据获取、技术指标、策略回测、交易执行与风险管理等完整流程。资源共三十五个文件,以三十四个Python脚本为核心,另有一个…

2026/10/23 19:11:07

全民健身智慧化场馆服务商,助力公共体育场馆降本增效

全民健身智慧化场馆服务商,助力公共体育场馆降本增效 公共体育场馆承担公益开放、全民健身服务的职能,长期面临人力成本高、能耗管控难、运维分散、数据上报繁琐等问题。很多场馆依靠人工登记、现场值守、定期巡检,不仅人力投入大&#xff0c…

2026/10/23 19:11:07

全民健身智慧场馆服务商排行,一站式场馆运营解决方案

全民健身智慧场馆服务商排行,一站式场馆运营解决方案 在全民健身数字化浪潮下,很多场馆运营方在挑选服务商时,容易直接参考各类榜单排行,但单纯看排名并不能保障项目落地效果。榜单更多是规模、宣传维度的参考,真正决定…

2026/10/23 19:11:07

Spring源码与SSM整合实战:从Bean生命周期到本地调试

简介:Spring Framework 5.2.8.RELEASE 的 SSM 整合压缩包,主要面向基于 Spring Spring MVC MyBatis 的 Java Web 项目开发者,用于快速获取与该项目版本匹配的核心 jar 依赖,解决手动下载零散、版本不兼容的问题。压缩包以 zip 格…

2026/10/23 19:06:05

零基础入门《太吾绘卷》Mod开发:从改数值到写事件

1. 从玩家到作者:为什么值得动手写一个Mod很多人第一次接触《太吾绘卷》的Mod开发,都是被某个具体需求逼出来的。比如觉得某个门派的功法成长曲线太慢,或者想让某个NPC的互动逻辑更符合自己的想象,又或者单纯想让界面显示的信息更…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑