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>

相關內容