Restaurando uma opção no final de uma função em zsh

Restaurando uma opção no final de uma função em zsh

Estou escrevendo uma função shell zsh (em oposição a um script) onde eu realmente gostaria que a extended_globopçã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_globenquanto 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_optionsopçã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 optionsarray associativo (dozsh/parametermó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
}

informação relacionada