
要啟用某個選項,我們可以使用setopt
.例如:
setopt extended_glob
我們如何檢查目前是否啟用了某個選項?
答案1
在 中zsh
,您可以使用setopt
顯示已啟用的選項和unsetopt
顯示未啟用的選項:
$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle
$ unsetopt
noaliases
allexport
noalwayslastprompt
alwaystoend
noappendhistory
autocd
autocontinue
noautolist
noautomenu
autonamedirs
.....
在 中bash
,您可以使用shopt -p
.
答案2
只需使用:
if [[ -o extended_glob ]]; then
echo it is set
fi
這也適用於bash
,但僅適用於 設定的選項set -o
,而不適用於 設定的選項shopt
。zsh
只有一組選項,可以使用setopt
或進行設定set -o
。
就像使用bash
(或任何 POSIX shell)一樣,您也可以執行set -o
或set +o
檢視目前選項設定。
答案3
這zsh/parameter
模組是預設發行版的一部分,提供關聯數組options
指示哪些選項處於開啟狀態。
if [[ $options[extended_glob] = on ]]; then …
對於具有單字母別名的選項(不是 的情況extended_glob
),您還可以檢查$-
。
請注意,測試啟用了哪些選項很少有用。如果您需要啟用或停用一段程式碼中的某個選項,請將該程式碼放入一個函數中並設定local_options
選項。您可以致電emulate
內建將選項重設為預設狀態。
my_function () {
setopt extended_glob local_options
}
another_function () {
emulate -L zsh
setopt extended_glob
}
答案4
() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>" } <optname>
與<optname>
從https://zsh.sourceforge.io/Doc/Release/Options.html
例子:
() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>" } LOCAL_TRAPS
option <LOCAL_TRAPS> is off
() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>" } localtraps
option <localtraps> is off
() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>" } localtrap
no such option <localtrap>