在 zsh 中恢复函数末尾的选项

在 zsh 中恢复函数末尾的选项

我正在编写一个 zsh shell 函数(而不是脚本),我真的希望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
}

相关内容