14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

zsh で特定のオプションを関数の中だけで有効にする

Posted at

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

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?