I have a bash terminal open. I want to find out whether the option extglob is enabled or disabled in this session, before I change its value. How can I do this?
Use shopt -q:
shopt -q extglob && echo enable || echo disable
-q option make
shopt discard output, and return status to indicate that options set or unset.
shopt only reports options which can appear in
BASHOPTS variable, those options are not valid to
set builtin command.
To check for options which are valid to
set, or can be appear in
$ bash --posix -c 'shopt -qo posix && echo enable || echo disable' enable
There are two lists of options in bash. One for
shopt and one for
extglob belongs to the
Its value may be printed by using either
shopt extglob or
shopt -p extglob.
An option like
nounset belongs to the
Its value may be printed by using
shopt -op nounset or
shopt -o nounset.
Check one option.
To print an specific option (without changing it) for shopt, use
shopt -p name:
$ shopt -p xpg_echo shopt -u xpg_echo
shopt -po name (yes, you may use
shopt -op for
$ shopt -po xtrace set +o xtrace
To list all options from shopt, use
shopt (or reusable
shopt -s or
shopt -u could be used.
The way to list all options to
set is with
set -o (related:
shopt -o is equivalent to
set -o and
shopt -op is to
LESS=+/'^ *shopt \[' man bash:
With no options, or with the -p option, a list of all settable options is displayed, If either -s or -u is used with no optname arguments, the display is limited to those options which are set or unset, respectively.
LESS=+/'^ *set \[' man bash:
If -o is supplied with no option-name, the values of the current options are printed. If +o is supplied with no option-name, a series of set commands to recreate the current option settings is displayed on the standard output.
$ set -o allexport off braceexpand on emacs on errexit off errtrace off functrace off hashall on histexpand on history on ignoreeof off interactive-comments on keyword off monitor on noclobber off noexec off noglob off nolog off notify off nounset off onecmd off physical off pipefail off posix off privileged off verbose off vi off xtrace off
$ shopt -sp shopt -s checkwinsize shopt -s cmdhist shopt -s expand_aliases shopt -s extglob shopt -s extquote shopt -s force_fignore shopt -s histappend shopt -s histverify shopt -s interactive_comments shopt -s progcomp shopt -s promptvars shopt -s sourcepath
It is worth mentioning about
shopt -op which actually lists
$ shopt -op set +o allexport set -o braceexpand set -o emacs set +o errexit set +o errtrace set +o functrace set -o hashall set -o histexpand set -o history set +o ignoreeof set -o interactive-comments set +o keyword set -o monitor set +o noclobber set +o noexec set +o noglob set +o nolog set +o notify set +o nounset set +o onecmd set +o physical set +o pipefail set +o posix set +o privileged set +o verbose set +o vi set +o xtrace