36

To enable an option, we can use setopt. e.g.:

setopt extended_glob

How can we check if an option is currently enabled ?

36

In zsh, you can use setopt to show options enabled and unsetopt to show which are not enabled:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

In bash, you can use shopt -p.

  • It should be noted that setopt only prints the options not enabled by default for that emulation mode. – llua Mar 28 '14 at 9:55
  • 6
    You should use set -o for FULL list. – Kutsan Kaplan Nov 1 '17 at 14:41
14

Just use:

[[ -o extended_glob ]]

That also works in bash, but only for the options set by set -o, not those set by shopt. zsh has only one set of options which can be set with either setopt or set -o.

Just like with bash (or any POSIX shell), you can also do set -o or set +o to see the current option settings.

11

The zsh/parameter module, which is part of the default distribution, provides an associative array options that indicates which options are on.

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

For options that have a single-letter alias (which is not the case of extended_glob), you can also check $-.

Note that it's rarely useful to test which options are enabled. If you need to enable or disable an option in a piece of code, put that code in a function and set the local_options option. You can call the emulate builtin to reset the options to a default state.

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.