Shell
在 zsh 中的函式末尾恢復選項
我正在編寫一個 zsh shell 函式(而不是腳本),我真的希望
extended_glob
啟用該選項。但由於該函式在呼叫者的上下文中執行,我不想破壞他們的設置。我想做的是有條件地啟用
extended_glob
,只要我需要它,然後將其恢復到使用者的選項。有什麼方法可以檢查 zsh 中是否啟用了選項?
您可以使用該
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
test:do_something() { local eg=no [[ -o extended_glob ]] && eg= setopt extended_glob ⋮ setopt ${eg}extended_glob }