zsh: jak sprawdzić, czy opcja jest włączona

39

Aby włączyć opcję, możemy użyć setopt. na przykład:

setopt extended_glob

Jak możemy sprawdzić, czy opcja jest obecnie włączona?

Sébastien
źródło

Odpowiedzi:

41

Za zshpomocą możesz setoptwyświetlić opcje włączone i unsetoptpokazać, które nie są włączone:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

W bash, możesz użyć shopt -p.

Cuonglm
źródło
Należy zauważyć, że setoptdrukuje tylko opcje domyślnie wyłączone w tym trybie emulacji.
llua
6
Powinieneś użyć set -odla PEŁNEJ listy.
Kutsan Kaplan
16

Po prostu użyj:

[[ -o extended_glob ]]

Działa to również bash, ale tylko dla opcji ustawionych przez set -o, a nie dla opcji ustawionych przez shopt. zshma tylko jeden zestaw opcji, które mogą być ustawiane albo setoptalbo set -o.

Podobnie jak w przypadku bash(lub dowolnej powłoki POSIX), możesz także zrobić set -olub set +ozobaczyć bieżące ustawienia opcji.

Stéphane Chazelas
źródło
11

zsh/parameterModuł, który jest częścią dystrybucji domyślnym zapewnia tablicę asocjacyjną options, która wskazuje, które opcje są włączone.

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

W przypadku opcji, które mają alias jednoliterowy (co nie ma miejsca extended_glob), możesz również sprawdzić $-.

Pamiętaj, że rzadko przydatne jest sprawdzenie, które opcje są włączone. Jeśli chcesz włączyć lub wyłączyć opcję w kodzie, umieść ten kod w funkcji i ustaw local_optionsopcję. Możesz wywołać emulatewbudowane, aby zresetować opcje do stanu domyślnego.

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}
Gilles „SO- przestań być zły”
źródło