zsh:如何检查是否启用了选项


39

要启用一个选项,我们可以使用setopt。例如:

setopt extended_glob

我们如何检查当前是否启用了选项?

Answers:


41

在中zsh,您可以setopt用来显示已启用的选项和unsetopt显示未启用的选项:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

$ unsetopt
noaliases
allexport
noalwayslastprompt
alwaystoend
noappendhistory
autocd
autocontinue
noautolist
noautomenu
autonamedirs
.....

在中bash,您可以使用shopt -p


应该注意的是,setopt仅打印该仿真模式默认未启用的选项。
2011年

6
您应该使用set -o完整列表。
库特桑·卡普兰

16

只需使用:

[[ -o extended_glob ]]

这也适用bash,但仅适用于由设置的选项set -o,不适用于设置的选项shoptzsh只有一组选项,可以使用setopt或设置set -o

就像bash(或任何POSIX shell)一样,您也可以执行set -oset +o查看当前选项设置。


11

zsh/parameter模块是默认分发的一部分,提供了一个关联数组options,用于指示启用了哪些选项。

if [[ $options[extended_glob] = on ]]; then 

对于具有单字母别名(不是extended_glob)的选项,您也可以选中$-

请注意,测试启用了哪些选项很少有用。如果需要在一段代码中启用或禁用某个选项,请将该代码放入函数中并设置该local_options选项。您可以调用emulate内建函数将选项重置为默认状态。

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.