AIGC标识 shell脚本

set -euo pipefail 完整解读

你脚本开头那行其实是三个保护开关的组合:

选项 作用 比喻
set -e 命令失败立即退出 保险丝
set -u 使用未定义变量时报错退出 拼写检查器
set -o pipefail 管道中任一命令失败则整个管道失败 流水线质检

((count++)) 就是一个典型陷阱:

点击查看代码
count=0
((count++))
# bash 算术规则:表达式的值 = count 自增【之前】的值 = 0
# bash 规定:算术表达式值为 0 → 退出码 = 1(视为"假/失败")
# set -e 看到退出码 1 → 以为出错了 → 立刻终止脚本!💀

解决办法

点击查看代码
# 方法1:|| true(最常用,推荐)
((count++)) || true        # 即使左边失败,true 永远返回0

# 方法2:用 let 代替
let count++                # let 不会因为值为0而返回失败

# 方法3:用 $(( )) 赋值
count=$((count + 1))       # 这是赋值语句,不是算术求值,不会返回失败

expr = Expression Evaluator(表达式求值器),在你的代码中就是用来计算两个变量之和的工具。如果是新写的脚本,建议直接用 $ ((a + b)) 替代。

写法 示例 说明
expr (旧) val=`expr $ a + $ b` 外部命令,效率低,仅整数
$ (( )) (推荐) val= $ ((a + b)) Bash 内置算术扩展,效率高,仅整数
bc val= $ (echo " $ a + $ b" | bc) 支持浮点数运算
posted @ 2026-08-07 14:32  不知者buwei  阅读(0)  评论(0)    收藏  举报