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

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

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

setopt extended_glob

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

答案1

在 中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.

答案2

只需使用:

if [[ -o extended_glob ]]; then
  echo it is set
fi

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

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

答案3

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
}

答案4

() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>"  } <optname>

<optname>https://zsh.sourceforge.io/Doc/Release/Options.html

例子:

() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>"  } LOCAL_TRAPS

option <LOCAL_TRAPS> is off

() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>"  } localtraps
option <localtraps> is off

() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>"  } localtrap 
no such option <localtrap>

相关内容