zsh: Cómo comprobar si una opción está habilitada

zsh: Cómo comprobar si una opción está habilitada

Para habilitar una opción, podemos usar setopt. p.ej:

setopt extended_glob

¿Cómo podemos verificar si una opción está actualmente habilitada?

Respuesta1

En zsh, puedes usar setoptpara mostrar las opciones habilitadas y unsetoptpara mostrar las que no están habilitadas:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

En bash, puedes usar shopt -p.

Respuesta2

Solo usa:

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

Eso también funciona en bash, pero sólo para las opciones establecidas por set -o, no para las establecidas por shopt. zshtiene sólo un conjunto de opciones que se pueden configurar con setopto set -o.

Al igual que con bash(o cualquier shell POSIX), también puede hacer set -oo set +over la configuración de opciones actual.

Respuesta3

Elzsh/parameterEl módulo, que forma parte de la distribución predeterminada, proporciona una matriz asociativa.optionseso indica qué opciones están activadas.

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

Para las opciones que tienen un alias de una sola letra (que no es el caso de extended_glob), también puedes marcar$-.

Tenga en cuenta que rara vez resulta útil probar qué opciones están habilitadas. Si necesita habilitar o deshabilitar una opción en un fragmento de código, coloque ese código en una función y configure ellocal_optionsopción. Puedes llamar alemulateincorporado para restablecer las opciones a un estado predeterminado.

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

Respuesta4

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

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

Ejemplos:

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

información relacionada