zshでrmを使用して除外しないのはなぜですか?

zshでrmを使用して除外しないのはなぜですか?

現在、ディレクトリに10個のファイルがあります。

10test
1test
2test
3test
4test
5test
6test
7test
8test
9test

2testを除くすべてのファイルを削除したいが、3test実行したコマンドはrm !(2test|3test)機能しません。次のエラーが発生します。

zsh: no matches found: !(2test|3test)

ベストアンサー1

!(pattern)有効な場合、一致を無効にするために使用できるkshglob構文。zsh^(pattern)extendedglob

setopt extendedglob
print -rl -- ^(2test|3test)

構文を使用するには、ksh以下を有効にする必要がありますkshglob

setopt kshglob
print -rl -- !(2test|3test)

また、使用することができますまさか/とは別にオペレーター:

setopt extendedglob
print -rl -- *test~[23]*

*testまたはで始まるファイルを除く)。23

また、このオプションが有効になっているかsが使用されていない限り、後続のnobareglobqualglobグループ化演算子はglob修飾子と競合します。たとえば、or はグローバル修飾子として扱われます。または(プライベート(明示的)グローバル修飾子を追加)が必要です。|(...)!(foo)^(foo)foo^foo!(foo)(#q)(#q)

おすすめ記事