回答:
この場合、パターンの最後にあるため、それは裸のglob修飾子と競合します。*(a1)最終日に最後にアクセスされたファイルと見なされます。(a1)グロブ修飾子として扱われます。したがって、あなたの!(a)場合、zshはaglob修飾子(ここではと呼ばれるファイルに適用されます!)の後に欠落している日数について不平を言います。
でzshグロブ、(...)グループ化は、主に使用されます(foo|bar)ので、追加して、交代|必ず末尾を作るために文書化の方法です(...)グロブ修飾子として扱われていません。
もう1つの文書化された代替方法は、括弧(!((a)))を2つにすることです。または、空のグロブ修飾子(など!(a)(-))を追加することもできます。
このあいまいさを完全になくすには、bare_glob_qualオプション(set +o bareglobqual)をオフにしてから、グロブ修飾子をextendedglob (#q...)構文(*(#qa1)ここ)で記述する必要があります。
kshglob(オプション1998で追加され、ほぼ同じ時間にはbashその追加extglobbashはその前に、拡張されたグロブを持っていなかったが)のために主に存在しているksh(エミュレーションモードemulate ksh)、のためにzsh実行できるようにするkshスクリプト、kshglob有効になっており、bareglobqual無効になっていますが。それが最初に導入された場合は、有効にした後kshglobのように、あなたはグロブ修飾子を指定する必要があると思い-(...)紛争のようなものを避けるが、あまりにも多くの混乱を引き起こし、と競合することをする@-(...)の構文ksh93、(#q...)およびbareglobqualオプションは、後に導入されました。
zshユーザーは一般にset -o extendedglob、入力がより簡単で(ほとんどの場合)より強力なzsh独自の拡張glob()演算子を好んで使用します(ksh88演算子kshglobもで有効になっていますbash -O extglob)。
たとえば、!(foo)と書かれ^fooます。!(foo|)barただし、同等のものはのように長くなり(^(foo|))barます。
その他のksh88-> zsh変換:
*(x) -> x#+(x) -> x##@(x|y) -> x|y?(x) -> (x|)一部のksh93-> zsh変換:
~(i:x)-> (#i)x(大文字と小文字を区別しない)~(N)x-> x(N)(nullglob、zshで発生){1,5}(x) -> x(#c1,5)@(foo&bar)-> foo~^barまたは^(^foo|^bar)でのみ見つかるものzsh:
<1-23> (10進数の範囲)pattern~exceptpattern(glob-qualifier) (zshグロブのキラー機能)(pattern/)#(に一致する任意のレベルのサブディレクトリpattern;の**/簡略バージョン(*/)#も最近ksh93とbashに追加されました)***/* (シンボリックリンクに続く再帰的グロビング)。(#a1)foobar (近似マッチング、いくつかのエラーを許可、ここでは1)