回答:
この場合、パターンの最後にあるため、それは裸のglob修飾子と競合します。*(a1)
最終日に最後にアクセスされたファイルと見なされます。(a1)
グロブ修飾子として扱われます。したがって、あなたの!(a)
場合、zshはa
glob修飾子(ここではと呼ばれるファイルに適用されます!
)の後に欠落している日数について不平を言います。
でzsh
グロブ、(...)
グループ化は、主に使用されます(foo|bar)
ので、追加して、交代|
必ず末尾を作るために文書化の方法です(...)
グロブ修飾子として扱われていません。
もう1つの文書化された代替方法は、括弧(!((a))
)を2つにすることです。または、空のグロブ修飾子(など!(a)(-)
)を追加することもできます。
このあいまいさを完全になくすには、bare_glob_qual
オプション(set +o bareglobqual
)をオフにしてから、グロブ修飾子をextendedglob
(#q...)
構文(*(#qa1)
ここ)で記述する必要があります。
kshglob
(オプション1998で追加され、ほぼ同じ時間にはbash
その追加extglob
bashはその前に、拡張されたグロブを持っていなかったが)のために主に存在している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~except
pattern(glob-qualifier)
(zshグロブのキラー機能)(pattern/)#
(に一致する任意のレベルのサブディレクトリpattern
;の**/
簡略バージョン(*/)#
も最近ksh93とbashに追加されました)***/*
(シンボリックリンクに続く再帰的グロビング)。(#a1)foobar
(近似マッチング、いくつかのエラーを許可、ここでは1)