Estou escrevendo uma função shell zsh (em oposição a um script) onde eu realmente gostaria que a extended_glob
opção fosse habilitada. Mas como a função é executada no contexto do chamador, não quero alterar suas configurações.
O que eu gostaria de fazer é ativar condicionalmente extended_glob
enquanto eu precisar e depois restaurá-lo para a opção do usuário. Existe alguma maneira de verificar se uma opção está habilitada no zsh?
Responder1
Você pode usar olocal_options
opçãopara restaurar automaticamente as opções quando a função for encerrada. Isto só seria apropriado se a sua função não fizer qualqueroutroalterações de opção que você pretende persistir após a conclusão da função.
Assim, você poderia escrever sua função assim:
do_something() {
setopt local_options extended_glob
⋮
}
Se você tiver alguma outra opção que deseja persistir após o retorno da função, você pode usar o options
array associativo (dozsh/parameter
módulo) para verificar e manipular facilmente opções individuais:
do_something() {
local eg=$options[extended_glob]
setopt extended_glob
⋮
options[extended_glob]=$eg
}
Se este módulo não estiver disponível em sua instalação, você poderá usar o-o
teste:
do_something() {
local eg=no
[[ -o extended_glob ]] && eg=
setopt extended_glob
⋮
setopt ${eg}extended_glob
}