![如何知道当前 bash 会话中是否启用了 extglob?](https://linux22.com/image/81330/%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E5%BD%93%E5%89%8D%20bash%20%E4%BC%9A%E8%AF%9D%E4%B8%AD%E6%98%AF%E5%90%A6%E5%90%AF%E7%94%A8%E4%BA%86%20extglob%EF%BC%9F.png)
我打开了 bash 终端。在更改选项 extglob 的值之前,我想查明该选项在此会话中是启用还是禁用。我怎样才能做到这一点?
答案1
赶紧跑:
$ shopt extglob
它将返回当前状态:
$ shopt extglob
extglob on
$ shopt -u extglob
$ shopt extglob
extglob off
要显示所有选项,只需运行:
$ shopt
答案2
使用购物-q:
shopt -q extglob && echo enable || echo disable
-q
option 丢弃shopt
输出,并返回状态以指示选项设置或未设置。
请注意,shopt
仅报告可以出现在变量中的选项,这些选项对内置命令BASHOPTS
无效。set
要检查对 有效set
或可以出现在 中的选项SHELLOPTS
,请使用shopt -qo
:
$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable
答案3
bash 中有两个选项列表。一为shopt
,一为set
。
该选项extglob
属于shopt
列表。可以使用或
来打印其值。shopt extglob
shopt -p extglob
像这样的选项nounset
就属于该set
列表。它的值可以使用或
来打印。shopt -op nounset
shopt -o nounset
检查一个选项。
要打印 shopt 的特定选项(不更改它),请使用shopt -p name
:
$ shopt -p xpg_echo
shopt -u xpg_echo
对于set
,使用:(shopt -po name
是的,您可以使用shopt -op
列表set
)。
$ shopt -po xtrace
set +o xtrace
列出选项。
要列出 shopt 中的所有选项,请使用shopt
(或可重用shopt -p
)。
也shopt -s
可以shopt -u
使用。
列出所有选项的方法set
是使用set -o
(相关set +o
:)。
或者:shopt -o
等于set -o
且shopt -op
等于set +o
。
手动的
从LESS=+/'^ *shopt \[' man bash
:
不带选项或使用 -p 选项时,将显示所有可设置选项的列表。如果使用 -s 或 -u 且不带 optname 参数,则显示分别限于已设置或未设置的选项。
从LESS=+/'^ *set \[' man bash
:
如果 -o 没有提供选项名称,则打印当前选项的值。如果 +o 没有提供选项名称,则标准输出上会显示一系列重新创建当前选项设置的 set 命令。
例子
$ 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
值得一提的是,shopt -op
它实际上列出了set
选项:
$ 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
答案4
添加到答案上面给出的, 对于set
标志来说,
当前的标志集可以在 $- 中找到。
(来源:bash帮助)
if [[ ${-%x*} != $- ]] ; then echo "Debug (xtrace) is on"; fi