“$-”中的“s”是什么?

gro*_*mal 11 bash shell-builtin

我通常很清楚$-. 在最近的 CentOS 上,我得到:

[grochmal@orion ~]$ echo $-
himBH
Run Code Online (Sandbox Code Playgroud)

hmBH都是来自set, 的选项,i意味着我的 shell 是交互式的。

然而,在我的 Arch Linux 上,我得到了:

[grochmal@haps ~]$ echo $-
himBHs
Run Code Online (Sandbox Code Playgroud)

我找不到任何有用的东西man bashset -s给我一个错误。那s代表什么?

ImH*_*ere 14

-s选择是在bash开始呼叫用-s,标准‘这意味着“从源命令’从手册:

-s 如果存在 -s 选项,或者在选项处理后没有剩余参数,则从标准输入读取命令。此选项允许在调用交互式 shell 时设置位置参数。

测试非常简单:

$ bash -c 'echo $-'
hBc

$ bash -sc 'echo $-'
hBcs
Run Code Online (Sandbox Code Playgroud)

默认情况下,为所有以前的 bash 版本启动新 shell 不会设置该选项:

$ b32sh -li
$ echo $-
himBH
Run Code Online (Sandbox Code Playgroud)

但它在 bash 4.4 中:

$ b44sh -li
$ echo $-
himBHs
Run Code Online (Sandbox Code Playgroud)