
Чтобы включить опцию, мы можем использовать 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), вы также можете использовать set -o
или set +o
, чтобы просмотреть текущие настройки параметров.
решение3
Thezsh/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>