Shell

在 zsh 中的函式末尾恢復選項

  • July 1, 2012

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

引用自:https://unix.stackexchange.com/questions/42028