Bash set - 设置 Shell 行为
set 是 Shell 内建命令,可启用或关闭执行选项,也可设置位置参数。不同 Shell 的支持范围可能不同,本文以 Bash 为准。
常用选项
| 写法 | 长名称 | 作用 |
|---|---|---|
set -e | errexit | 在符合规则的未处理失败后退出 |
set -u | nounset | 展开未设置变量时报告错误 |
set -x | xtrace | 执行前输出展开后的命令 |
set -n | noexec | 读取命令但不执行,交互式 Shell 会忽略 |
set -f | noglob | 禁用文件名通配展开 |
set -o pipefail | pipefail | 管道中任一命令失败时返回非零状态 |
短选项通常用 - 启用、用 + 关闭:
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只改变管道的退出状态,不会自动处理错误。