zsh では普通はオプションを指定したらそのシェルが終了するまでずっと有効なんだけど、そうじゃなくて関数内だけで有効にする方法があるので紹介する。
zsh には local_options
というオプションがある。これを有効にすると、関数を出た時に関数を呼び出した時点でのオプション設定が復元される。つまり、関数の中で設定したオプションをその関数内だけで有効にする、という動作になる。
例を紹介する。
glob_dots を関数の中だけで有効にする例
glob_dots
は、*
でワイルドカード指定したときにドットで始まるファイル名にもマッチするようになるオプション。
デフォルトでは無効になってるんだけど、シェルスクリプトとかzshrcの中に関数を書いている時とかでたまに有効にしたくなることがある。でも適当に有効にすると影響範囲が大きくなりすぎて困る。そういうときに local_options
を使うと関数の中だけで有効に出来て、安心して使えるようになる。
# まず前提として以下の3つのファイルがあるとする
ls -a .
# => .hidden1 .hidden2 text1.txt
function glob_dots_function()
{
setopt local_options # local_options を有効にする
setopt glob_dots
echo *
}
# 関数を呼び出す前は glob_dots は無効
echo *
# => text1.txt
# 関数の中では glob_dots は有効
glob_dots_function
#=> .hidden1 .hidden2 text1.txt
# 関数から戻ってくるとまた無効に戻る
echo *
# => text1.txt
役に立つことがあると思うので参考にしてみてください!
参考
man zshoptions(1) の LOCAL_OPTIONS