!(pattern)
is ksh
glob, em zsh
, você usa ^(pattern)
para negar a correspondência quando extendedglob
ativado:
setopt extendedglob
print -rl -- ^(2test|3test)
Se você quiser usar a sintaxe ksh
, será necessário ativar kshglob
:
setopt kshglob
print -rl -- !(2test|3test)
Você também pode usar o operador e não / exceto :
setopt extendedglob
print -rl -- *test~[23]*
( *test
arquivos, exceto aqueles que começam com 2
ou 3
).
Além disso, a menos que a opção nobareglobqual
esteja ativada ou você use |
s dentro deles, os operadores de agrupamento (...)
glob em conflito entrarão em conflito com qualificadores glob. Por exemplo, em !(foo)
ou ^(foo)
, o foo
seria tratado como um qualificador glob. Você precisaria de ^foo
ou !(foo)(#q)
(o (#q)
adiciona um qualificador glob não-nulo (explícito)).