私は 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
}