Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした