zsh: Как проверить, включена ли опция

zsh: Как проверить, включена ли опция

Чтобы включить опцию, мы можем использовать 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>

Связанный контент