![Restaurando uma opção no final de uma função em zsh](https://rvso.com/image/23553/Restaurando%20uma%20op%C3%A7%C3%A3o%20no%20final%20de%20uma%20fun%C3%A7%C3%A3o%20em%20zsh.png)
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
}