笔记 · Vault Pattern

Pattern: set -e VAR bash

**发现日期**: 2026-07-28 **来源**: startup-check.sh 长期存在但未被发现的bug **严重度**: 🔴 高(导致所有带警告的检查被误判为失败) bash的 `((expr))` 算术表达式:表达式结果为0时返回exit 1。配合 `set -e`,脚本立即终止。

2026/07/30
日期
技术
分类
4
标签数

Pattern: set -e + ((VAR++)) bash静默退出

发现日期: 2026-07-28 来源: startup-check.sh 长期存在但未被发现的bug 严重度: 🔴 高(导致所有带警告的检查被误判为失败)

触发条件

set -euo pipefail
WARNINGS=0
((WARNINGS++))  # 当WARNINGS=0时,后置递增返回0,((0))=exit 1 → set -e触发脚本退出

根因

bash的 ((expr)) 算术表达式:表达式结果为0时返回exit 1。配合 set -e,脚本立即终止。

修复

# ❌ 危险写法
((COUNT++))

# ✅ 安全写法
COUNT=$((COUNT + 1))

影响范围

startup-check.sh 中14处 ((ERRORS++))((WARNINGS++))。导致:

  • 任何警告都使脚本exit 1
  • 摘要信息从未被打印
  • smoke-test误判startup-check为FAIL(实际一切正常)

预防规则

  • 所有bash脚本的 ((...)) 递增必须用 $((...)) 赋值形式
  • 或在 ((...)) 后加 || true
  • CI/CD中应检查bash脚本是否含 set -e + ((...++)) 组合
📌 源:D:\个人文件\AI\Patterns\pattern-bash-set-e-count-bug.md
🔒 已脱敏:内部路径 / 任务 ID / 邮箱 / 电话 / 微信号
延伸阅读 · Related

看完这篇,下一步该看什么

同标签笔记 · 3
底层原理 · 2
实战 Agent · 2
行业案例 · 1