zshの関数の末尾からオプションを復元する

zshの関数の末尾からオプションを復元する

extended_glob私はスクリプトではなくzshシェル関数を作成していますが、このオプションを有効にしたいと思います。ただし、関数は呼び出し元のコンテキストで実行されるため、その設定を混乱させたくありません。

私が望むのは、必要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
}

関連情報