Я пишу функцию оболочки 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
}