Восстановление опции в конце функции в zsh

Восстановление опции в конце функции в zsh

Я пишу функцию оболочки zsh (в отличие от скрипта), где я бы очень хотел, extended_globчтобы опция была включена. Но поскольку функция выполняется в контексте вызывающего, я не хочу затирать его настройки.

Я хотел бы сделать условно включенным, extended_globпока мне это нужно, а затем восстановить его в качестве опции пользователя. Есть ли способ проверить, включена ли опция в zsh?

решение1

Вы можете использоватьlocal_optionsвариантдля автоматического восстановления параметров при выходе из функции. Это будет уместно только в том случае, если ваша функция не делает никакихдругойизменения параметров, которые вы намерены сохранить после завершения функции.

Таким образом, вы можете записать свою функцию следующим образом:

do_something() {
  setopt local_options extended_glob
}

Если у вас есть какая-то другая опция, которую вы хотите сохранить после возврата функции, вы можете использовать optionsассоциативный массив (изzsh/parameterмодуль) для легкой проверки и управления отдельными параметрами:

do_something() {
  local eg=$options[extended_glob]
  setopt extended_glob
  options[extended_glob]=$eg
}

Если этот модуль недоступен в вашей установке, то вы можете использовать-o тест:

do_something() {
  local eg=no
  [[ -o extended_glob ]] && eg=
  setopt extended_glob
  setopt ${eg}extended_glob
}

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