脚本先过语法关,再谈运行结果
语法检查可以提前发现括号或引号不配对,但不会证明业务逻辑正确。
继续阅读恰西 / 按主题阅读
语法检查可以提前发现括号或引号不配对,但不会证明业务逻辑正确。
继续阅读给人阅读的输出可能受到列宽、颜色、转义和语言环境影响。文件名又允许空格与换行,把文本再按空白切开,会丢掉原本的路径边界。
继续阅读手写位置参数判断容易漏掉组合选项,getopts 适合短选项接口。 参数数量变多后,手写 shift 与位置判断容易漏掉选项取值、未知字符和错误状态。getopts 提供基础解析循环,让脚本能把注意力放回实际业务。
继续阅读两个任务使用相同临时路径时,可能互相覆盖,也可能读到另一轮任务的残留。mktemp 创建的独立目录使输入、中间结果与输出更容易保持一一对应。
继续阅读临时资源需要在成功和失败两条路径上都能释放。
继续阅读函数把重复步骤集中起来,但如果内部偷偷读取和修改全局变量,调用者仍然很难预测结果。先明确参数、标准输出与退出码,封装才真正具有价值。
继续阅读固定选项可以通过 case 表达,比分散的条件判断更容易检查。 启动、停止、帮助这类有限集合,可以把每个选项的行为放在一个相邻分支中。这样既方便审查支持范围,也容易发现默认路径是否遗漏了输入。
继续阅读重定向表达式按照书写顺序处理。把标准错误连接到标准输出时,连接的是那个时刻的目标;之后再改变标准输出的去处,并不一定改变先前建立的关系。
继续阅读正常结果适合供下游解析,诊断信息应写到标准错误。
继续阅读有些命令成功时保持安静,有些失败时依然会输出部分结果。退出码提供了另一条独立信号,调用方应该先根据状态选择分支,再决定如何展示信息。
继续阅读反斜杠可能被 read 解释,使用 -r 可以避免它作为转义符被消费。 文本行常常包含路径、正则表达式或缩进,读取时不应未经约定就把它们重新解释。清空 IFS 与启用 read -r,分别处理首尾分隔字符和反斜杠的问题。
继续阅读变量展开之后还可能继续经历分词与文件名匹配。参数里一个普通空格,就可能把原来的一条路径变成两条参数,导致命令操作完全不同的对象。
继续阅读