我正在編寫一個 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
}