~~ 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.