~~
não usa um padrão vazio. Em vez disso, faz uma das duas coisas:
- No final de todo o padrão, corresponde literalmente a "
~~
". - No meio, corresponde literalmente a um único "
~
" e passa para o próximo padrão excluído (ou seja, um literal~
seguido pelo operador~
).
Se estendermos seu conjunto de arquivos com alguns extras, poderemos ver isso acontecer:
touch file3~ file3~~ file4~ file4~~
Agora executando seu primeiro comando estranho:
print -rl file*~f*3~~file4*
file1
file2
file3
file3~~
file3~
foi excluído, assim como todos os três file4*
s. file3~~
ainda está lá, porque não corresponde a f*3~
.
O segundo:
print -rl file*~f*3~file4*~~
file1
file2
file3~
file3~~
file4
file45
file4~
Apenas file4~~
foi excluído, porque esse é o único que corresponde a file4*~~
.
O último caso agora tem saída:
print -rl file*~~f*3~file4*
file3~
file3~~
pois esses são os dois arquivos correspondentes a file*~
que não correspondem a f*3
ou file4*
.
Talvez isso possa ser um bug de análise, pelo menos para o caso literal do operador, mas não vejo um uso para um padrão de exclusão vazio, por isso não sei o que mais ele deve fazer.