zsh: come verificare se un'opzione è abilitata


39

Per abilitare un'opzione, possiamo usare setopt. per esempio:

setopt extended_glob

Come possiamo verificare se un'opzione è attualmente abilitata?

Risposte:


42

In zsh, puoi usare setoptper mostrare le opzioni abilitate e unsetoptper mostrare quali non sono abilitate:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

In bash, puoi usare shopt -p.


Va notato che setoptstampa solo le opzioni non abilitate per impostazione predefinita per quella modalità di emulazione.
llua,

6
È necessario utilizzare set -oper l'elenco COMPLETO.
Kutsan Kaplan,

16

Usa solo:

[[ -o extended_glob ]]

Funziona anche in bash, ma solo per le opzioni impostate da set -o, non quelle impostate da shopt. zshha solo una serie di opzioni che possono essere impostate con setopto set -o.

Proprio come con bash(o qualsiasi shell POSIX), puoi anche fare set -oo set +ovedere le impostazioni delle opzioni correnti.


11

Il zsh/parametermodulo, che fa parte della distribuzione predefinita, fornisce un array associativo optionsche indica quali opzioni sono attive.

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

Per le opzioni che hanno un alias a lettera singola (che non è il caso di extended_glob), puoi anche controllare $-.

Si noti che raramente è utile verificare quali opzioni sono abilitate. Se è necessario abilitare o disabilitare un'opzione in un pezzo di codice, inserire quel codice in una funzione e impostare l' local_optionsopzione. È possibile chiamare il emulatebuilt-in per ripristinare le opzioni su uno stato predefinito.

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.