我正在编写一个 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
}