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

39

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

setopt extended_glob

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

Sébastien
fonte

Respostas:

41

Em zsh, você pode usar setoptpara mostrar as opções ativadas e unsetoptmostrar as que não estão ativadas:

$ 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.

cuonglm
fonte
Note-se que setoptapenas imprime as opções não ativadas por padrão para esse modo de emulação.
03:
6
Você deve usar set -opara a lista COMPLETA.
Kutsan Kaplan #
16

Apenas use:

[[ -o extended_glob ]]

Isso também funciona bash, mas apenas para as opções definidas por set -o, não as definidas por shopt. zshpossui 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 atuais das opções.

Stéphane Chazelas
fonte
11

O zsh/parametermódulo, que faz parte da distribuição padrão, fornece uma matriz associativa optionsque 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 extended_glob), você também pode verificar $-.

Observe que raramente é útil testar quais opções estão ativadas. 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 a local_optionsopção. Você pode chamar o emulatebuilt-in 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
}
Gilles 'SO- parar de ser mau'
fonte