用途:为 GNU Bash 4.4+ 的 Linux 环境编写防御式、可维护的 shell 脚本,明确不处理 macOS/BSD 兼容与 Windows 路径。
主要能力与写法:脚本基础采用 #!/usr/bin/env bash、set -Eeuo pipefail 与 shopt -s inherit_errexit,配合 ERR 与 EXIT trap,临时目录用 _tmpdir=$(mktemp -d) 并在退出时清理,主体包在 main() 中并用 source guard 便于测试。核心规则包括所有展开加引号、函数内用 local 与 local -r、脚本常量用 readonly、优先 printf '%s\n' 而非 echo、条件用 [[ ]]、算术用 (( ))、命令替换用 $(),参数以 -- 结尾,必填环境变量用 : "${VAR:?must be set}",禁止 eval 用户输入,命令以数组形式构建执行,声明与赋值分离以保留退出码,支持 PS4 加 bash -x 调试、PIPESTATUS 与具名退出码。
生产模式:依赖检查 require()、dry-run 包装 run()、原子写入 atomic_write()、带退避的 retry()、flock 脚本加锁、幂等 ensure_dir/ensure_link、输入校验与 umask 077、信号清理 trap,以及分级日志与 die()。安全迭代使用 NUL 分隔的 find -print0、readarray,并处理 glob 无匹配。参数解析用 while 加 case 循环。性能上优先参数展开、(( ))、[[ =~ ]]、缓存结果、xargs -0 -P 与关联数组。还列出 for f in $(ls)、local x=$(cmd)、cat file | grep、优先 kill -9 等反模式及修正。
验证:完成前运行 shellcheck --enable=all 与 shfmt -d 需零警告,并测试空输入、缺失文件、路径含空格等边界;预提交可用 shellcheck *.sh && shfmt -i 2 -ci -d *.sh。限制:仅面向 GNU/Linux 与 Bash 4.4+,具体收费、平台支持范围资料暂未提供。