查看shell选项状态命令详解
echo $-
是一个在 Unix/Linux shell(如 Bash)中查看当前 shell 选项状态 的命令。它输出一个由字母组成的字符串,每个字母代表一个启用的 shell 选项。以下是详细解释:
作用:
显示当前 shell 会话中已激活的 选项标志(Options Flags),这些选项控制 shell 的行为(如调试、交互模式等)。
常见选项字母及含义:
字母 | 选项名称 | 作用描述 |
---|---|---|
h | hashall | 记忆命令路径,加速查找(默认启用) |
i | interactive | 当前为交互式 shell(如终端会话) |
m | monitor | 启用作业控制(如 fg /bg 管理后台任务) |
B | braceexpand | 启用花括号扩展(如 {1..3} 生成序列) |
H | histexpand | 启用历史命令扩展(如 ! 调用历史命令) |
s | --stdin | 从标准输入读取命令 |
c | --command | 从字符串读取命令(如 bash -c "echo hi" ) |
u | nounset | 使用未定义变量时报错(增强脚本健壮性) |
x | xtrace | 打印每条命令及其参数(用于调试) |
e | errexit | 命令失败时立即退出脚本(错误处理) |
示例输出:
$ echo $-
himBHs # 常见默认交互式 shell 的输出
- 这里
himBHs
表示启用了h
,i
,m
,B
,H
,s
选项。
如何修改选项?
- 启用选项:
set -<选项字母>
例:set -x
启用调试跟踪(输出+
前缀的命令)。 - 禁用选项:
set +<选项字母>
例:set +x
关闭调试跟踪。
典型应用场景:
- 调试脚本:
临时添加set -x
,运行后检查$-
是否包含x
确认调试开启。 - 检查交互模式:
若echo $-
包含i
,说明当前是交互式 shell(如终端)。 - 验证安全设置:
在脚本中检查u
(nounset
)或e
(errexit
)是否启用。
注意:
- 不同 shell(Bash/Zsh/Ksh)支持的选项可能略有差异,使用
man set
查看文档。 - 部分选项(如
i
)由 shell 自动设置,用户无法直接修改。
通过 echo $-
可快速了解当前 shell 的环境配置,是调试和优化脚本的实用工具。