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

39

Чтобы включить опцию, мы можем использовать setopt. например:

setopt extended_glob

Как мы можем проверить, включена ли опция в настоящее время?

Себастьен
источник

Ответы:

42

В 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.

cuonglm
источник
Следует отметить, что setoptпечатаются только параметры, не включенные по умолчанию для этого режима эмуляции.
Луа
6
Вы должны использовать set -oдля полного списка.
Куцан Каплан
16

Просто используйте:

[[ -o extended_glob ]]

Это также работает bash, но только для опций, установленных set -o, а не тех, которые установлены shopt. zshимеет только один набор опций , которые могут быть установлены либо setoptили set -o.

Как и с bash(или любой оболочкой POSIX), вы также можете сделать set -oили set +oпросмотреть текущие настройки параметров.

Стефан Шазелас
источник
11

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
}
Жиль "ТАК - перестань быть злым"
источник