我通过键入 查找了 shell 内置命令集help set
,简短的语法描述显示:
设置 [-abefhkmnptuvxBCHP] [-o 选项名称] [--] [arg ...]
帮助文档解释说,变量 $- 保存使用 set 命令设置的所有当前参数。
因此,我确实echo $-
显示了 shell 的所有参数设置,我的是:
他BH
文档和上面的简短语法描述中提到了所有字母,但缺少一个:我选项。i
set
bash中的参数是什么意思?
答案1
Therei
表示 shell 是交互式的。
这在联机帮助页部分讨论 shell 交互的情况:
交互式 shell 是一种在没有非选项参数且没有
-c
选项的情况下启动的 shell,其标准输入和错误都连接到终端(由 确定isatty(3)
),或者是使用该-i
选项启动的 shell。PS1
设置并$-
包含i
是否bash
是交互式的,允许 shell 脚本或启动文件测试此状态。
shell 的交互性质是在初始化期间确定的,并且其效果在 shell 的生命周期内不会改变;这就是为什么set
不报告i
为可以更改的标志的原因。在 Bash 4.3 版本中,set -i
或set +i
被接受,但除了在内部更改标志之外没有任何效果forced_interactive
(并且该标志仅在初始化期间读取)。在 4.4 版本中,它们会生成一条错误消息。您可以在中查看标志处理的详细信息flags.c
在 Bash 源代码中。