Bash set - 设置 Shell 行为

set 是 Shell 内建命令,可启用或关闭执行选项,也可设置位置参数。不同 Shell 的支持范围可能不同,本文以 Bash 为准。

常用选项

写法长名称作用
set -eerrexit在符合规则的未处理失败后退出
set -unounset展开未设置变量时报告错误
set -xxtrace执行前输出展开后的命令
set -nnoexec读取命令但不执行,交互式 Shell 会忽略
set -fnoglob禁用文件名通配展开
set -o pipefailpipefail管道中任一命令失败时返回非零状态

短选项通常用 - 启用、用 + 关闭:

set -u
# commands
set +u

长名称使用 set -o NAME 启用、set +o NAME 关闭:

set -o pipefail
# commands
set +o pipefail

查看当前选项

# 显示选项及开关状态
set -o
 
# 输出可用于恢复当前选项状态的命令
set +o

直接运行 set 会输出 Shell 变量和函数,其中可能包含令牌、密码或其他敏感信息,不应将结果直接粘贴到公开日志。

设置位置参数

set -- alpha "two words" gamma
 
printf '%s\n' "$1"
printf '%s\n' "$2"
printf '%s\n' "$3"

set -- 可清空所有位置参数:

set --

使用注意

  • set -e 存在条件判断、循环、命令列表和子 Shell 等例外,不应把它当作完整的错误处理机制。
  • set -x 会输出展开后的命令,可能泄露环境变量、访问令牌和密码;敏感操作前应使用 set +x
  • pipefail 只改变管道的退出状态,不会自动处理错误。

参考资料