zsh: Como verificar se uma opção está habilitada

zsh: Como verificar se uma opção está habilitada

Para habilitar uma opção, podemos usar setopt. por exemplo:

setopt extended_glob

Como podemos verificar se uma opção está habilitada no momento?

Responder1

No zsh, você pode usar setoptpara mostrar as opções habilitadas e unsetoptquais não estão habilitadas:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

Em bash, você pode usar shopt -p.

Responder2

Apenas use:

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

Isso também funciona bash, mas apenas para as opções definidas por set -o, não aquelas definidas por shopt. zshtem apenas um conjunto de opções que podem ser definidas com setoptou set -o.

Assim como com bash(ou qualquer shell POSIX), você também pode fazer set -oou set +over as configurações das opções atuais.

Responder3

Ozsh/parametermódulo, que faz parte da distribuição padrão, fornece uma matriz associativaoptionsque indica quais opções estão ativadas.

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

Para opções que possuem um alias de uma letra (o que não é o caso de extended_glob), você também pode verificar$-.

Observe que raramente é útil testar quais opções estão habilitadas. Se você precisar ativar ou desativar uma opção em um trecho de código, coloque esse código em uma função e defina olocal_optionsopção. Você pode ligar para oemulateembutido para redefinir as opções para um estado padrão.

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

Responder4

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

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

Exemplos:

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

informação relacionada