偶然出会った
_setopt extended_glob
_
...特定のパターンを除外するなど、いくつかのクールなワイルドカードの追加を可能にする拡張グロブを有効にするために、たとえば次のようになります。
_ls ^foo*
_
... _foo*
_に一致するパターンを除いて、現在のディレクトリ内のすべてのパスでls
を使用します。
_setopt extended_glob
_を_.zshrc
_内に配置することを提案するチュートリアルを見つけましたが、多くのzsh構成テンプレートがそのオプションを見逃しており、オプションがデフォルトで無効になっているいくつかの欠点があるか、副作用さえ?
それとも、_extended_glob
_の中に入れて_.zshrc
_を常に有効にすることは、まったく無害ですか?
潜在的な問題は、_^
_がファイル名で非常に有効な文字であるため、オプションが設定されているかどうかに応じて、それを含むパターンの意味が変わると思います。
_$ touch 'foo' 'bar' '^foo' '^bar'
$ ls ^foo*
^foo
$ setopt extendedglob
$ ls ^foo*
bar ^bar ^foo
_
標準のシェルは_^
_を通常の文字として使用するため、互換性のためにこの機能はデフォルトで無効になっている可能性があります。
有効になっているオプションを覚えている限り、つまりシェルがグロブをどのように解釈するかを知っている限り、_extended_glob
_を有効のままにしておくことはインタラクティブな使用では問題になりません。
それを予期しないが奇妙なファイル名を使用するスクリプトの場合、それは問題になりますが、非対話型シェルは_.zshrc
_を読み取るべきではないので、そこに設定しても問題ありません。 _.zshenv
_には設定しないでください。
Kshスタイルの拡張グロブ(@(...|...)
など、_setopt kshglob
_)にも同様の問題があり、zshがグロブの括弧を処理する方法と競合します。 @(f|b)
は、kshglob
が設定されているかどうかによって異なる意味を持ちます。