zsh の関数の最後にオプションを復元する

zsh の関数の最後にオプションを復元する

私は zsh シェル関数 (スクリプトではなく) を書いていますが、そこでは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
}

関連情報