最直接有效的方式是启用 set -u 让脚本在引用未定义变量时立即报错退出;配合 set -e、set -o pipefail 构成 set -euo pipefail 标准防御配置,提升脚本健壮性。

最直接有效的方式是在脚本开头启用 set -u(或 set -o nounset),让脚本在引用未定义变量时立即报错退出,而不是静默使用空值。
启用严格变量检查
在脚本第一行 shebang 后立即添加:
#!/usr/bin/env bashset -u
这样,只要出现 echo "$USER_NAME" 而 USER_NAME 根本没定义,脚本就会中断并提示 unbound variable,避免后续逻辑因空值出错。
安全引用可能为空或未定义的变量
即使开了 set -u,有些变量天然可能为空(如命令执行失败返回空),这时应显式处理默认值或校验:
- 用
${VAR:-default}提供兜底值:例如rm -rf ${base_path:-/tmp}/$tmp_file - 用
${VAR:?error message}强制非空:例如cp file.txt ${DEST_DIR:?DEST_DIR is not set},变量为空或未定义时直接报错退出 - 避免裸写
$VAR,尤其在路径拼接、命令参数中——始终用双引号包裹:"$VAR",防止空格或空值引发语法错误或误删根目录
配合其他严格模式提升整体健壮性
set -u 通常不单独使用,推荐组合启用:
-
set -e:任一命令失败即退出 -
set -o pipefail:管道中任意子命令失败,整个管道算失败 -
set -o nounset(即set -u):禁止使用未定义变量
一行写全就是:set -euo pipefail。这是现代 Shell 脚本的标准防御配置,放在 shebang 下方第二行即可。
不复杂但容易忽略











