zsh: So prüfen Sie, ob eine Option aktiviert ist

zsh: So prüfen Sie, ob eine Option aktiviert ist

Um eine Option zu aktivieren, können wir verwenden setopt. Beispiel:

setopt extended_glob

Wie können wir überprüfen, ob eine Option derzeit aktiviert ist?

Antwort1

In zshkönnen Sie verwenden, setoptum aktivierte Optionen anzuzeigen und unsetoptum anzuzeigen, welche nicht aktiviert sind:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

In bashkönnen Sie verwenden shopt -p.

Antwort2

Benutz einfach:

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

Dies funktioniert auch in bash, aber nur für die von festgelegten Optionen set -o, nicht für die von festgelegten shopt. hat nur einen Satz von Optionen, die entweder mit oder zshfestgelegt werden können .setoptset -o

Wie bei bash(oder jeder anderen POSIX-Shell) können Sie auch set -ooder verwenden set +o, um die aktuellen Optionseinstellungen anzuzeigen.

Antwort3

Derzsh/parameterDas Modul, das Teil der Standarddistribution ist, bietet ein assoziatives Arrayoptionsdas angibt, welche Optionen aktiviert sind.

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

Für Optionen, die einen einstelligen Alias ​​haben (was bei nicht der Fall ist extended_glob), können Sie auch$-.

Beachten Sie, dass es selten sinnvoll ist, zu testen, welche Optionen aktiviert sind. Wenn Sie eine Option in einem Codeabschnitt aktivieren oder deaktivieren müssen, fügen Sie diesen Code in eine Funktion ein und setzen Sie dielocal_optionsOption. Sie können dieemulateIntegriert, um die Optionen auf einen Standardzustand zurückzusetzen.

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}

Antwort4

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

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

Beispiele:

() {[[ -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>

verwandte Informationen