要启用某个选项,我们可以使用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
,而不适用于 所设置的选项shopt
。zsh
只有一组选项,可以使用setopt
或进行设置set -o
。
就像使用bash
(或任何 POSIX shell)一样,您也可以执行set -o
或set +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>