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

39

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

setopt extended_glob

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

Sébastien
fuente

Respuestas:

42

En zsh, puede usar setoptpara mostrar las opciones habilitadas y unsetoptpara mostrar cuáles 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.

Cuonglm
fuente
Cabe señalar que setoptsolo imprime las opciones no habilitadas por defecto para ese modo de emulación.
llua
66
Debe usar set -opara la lista COMPLETA.
Kutsan Kaplan
16

Solo usa:

[[ -o extended_glob ]]

Eso también funciona bash, pero solo para las opciones establecidas por set -o, no las establecidas por shopt. zshtiene solo 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.

Stéphane Chazelas
fuente
11

El zsh/parametermódulo, que forma parte de la distribución predeterminada, proporciona una matriz asociativa optionsque 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 puede verificar $-.

Tenga en cuenta que rara vez es ú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 la local_optionsopción. Puede llamar al emulatebuiltin para restablecer las opciones a un estado predeterminado.

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}
Gilles 'SO- deja de ser malvado'
fuente