![如何理解“echo $-”的输出?](https://linux22.com/image/96288/%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3%E2%80%9Cecho%20%24-%E2%80%9D%E7%9A%84%E8%BE%93%E5%87%BA%EF%BC%9F.png)
如何理解 的输出echo $-
?它看起来像某种旗帜字符。我无法通过谷歌搜索找到线索。
答案1
它们代表 shell 标志的值;这是由 POSIX 定义:
-
(连字符。)扩展为当前选项标志(连接成字符串的单字母选项名称),如在调用时、通过
set
特殊的内置命令或由 shell 隐式指定的那样。
这zsh手册简要提到一下:
-
set
<S> 在调用时或通过或命令提供给 shell 的标志setopt
。
正如bash手册在描述中set
:
当前的选项集可以在 中找到
$-
。
要了解输出,echo $-
您需要查找 shell 手册中的选项。例如,在 Bash 中,为我echo $-
输出himBHs
,这意味着-h
、-m
和选项已启用(有关详细信息,请参阅-B
参考资料),shell 是交互式的 ( ) 并从标准输入读取 ( )。-H
help set
-i
-s
答案2
来自Bash 参考手册:
设置 [+abefhkmnptuvxBCEHPT] [+o 选项名称] [arg ...]
如果没有选项,每个 shell 变量的名称和值将以可重复用作设置或重置当前设置变量的输入的格式显示。
...
除非另有说明,这些选项默认处于关闭状态。使用 + 而不是 - 会导致这些选项被关闭。还可以将选项指定为 shell 调用的参数。 当前的选项集可以在 $- 中找到。 除非遇到无效选项,否则返回状态始终为 true。