最近触れた
setopt extended_glob
...拡張ワイルドカードを有効にするには、次の特定のパターンを除外するなど、素晴らしいワイルドカードをたくさん追加できます。
ls ^foo*
...ls
一致するパターンを除いて、現在のディレクトリのすべてのパスに使用されますfoo*
。
setopt extended_glob
私はあなたのものを置くことを提案するチュートリアルを見つけ.zshrc
ましたが、多くのzsh設定テンプレートがそのオプションを見逃しており、オプションは次のとおりです。デフォルトでは無効いくつかの欠点や副作用がありますか?
extended_glob
それとも、常に1つに入れてアクティブにすることはまったく無害ですか.zshrc
?
答え1
基本的な問題は、これが^
ファイル名でかなり有効な文字であるため、これを含むパターンの意味がオプションを設定するかどうかに応じて変更されることです。
$ touch 'foo' 'bar' '^foo' '^bar'
$ ls ^foo*
^foo
$ setopt extendedglob
$ ls ^foo*
bar ^bar ^foo
標準シェルはこれをプレーン文字として扱うので、^
互換性のためにこの機能はデフォルトで無効にすることができます。
どのオプションが有効になっているかを覚えている限り、つまりシェルがglobを解釈する方法を知っている限り、対話型の使用でそのextended_glob
オプションを有効にすることは問題になりません。
これは予期しませんでしたが、奇妙なファイル名を使用するスクリプトでは問題になる可能性がありますが、非対話型シェルはそれを読み取ることができないため、それを設定すると機能.zshrc
します。に設定しないでください.zshenv
。
kshスタイルの拡張glob(@(...|...)
などsetopt kshglob
)には、zshがglobブラケットを処理する方法と競合するため、同様の問題があります。設定するか@(f|b)
どうかによって意味が異なります。kshglob