在 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
}

相關內容