Quel est le glob qui correspond à tous les ~ / xy * sauf pour ~ / xyz *?

Cela ne fonctionnera pas: ~/xy*~~/xyz* .

Je sais que $HOME/xy*~$HOME/xyz* fonctionne, mais j'aimerais savoir s'il existe un moyen d'get le même effet avec les préfixes de path commençant par ~ , comme ~/ ou ~user/ ~nameddir/ .

Fondamentalement, vous vous attendez à ce que le shell développe le tilde dans $HOME au début et quelque part au milieu d'un mot qui ne se produira pas: le 1er ~ sera étendu à $HOME mais pas aux autres (dans ce cas , du fait de l' extendedglob deglobgl, ils sont traités comme des opérateurs glob) …
Comme nous l'avons noté, il existe des façons de le faire – même la suggestion de Sundeep est OK parce que zsh comprend ksh -like globs (où bash copiés):

 setopt kshglob setopt nobareglobqual print -rl ~/xy?([^z]*) 

~ n'est étendue que dans très peu de contexts .

Ici, vous pouvez faire ~/xy^z* ou ~/xy(*~z*) .

Vous pouvez effectuer la négation:

 ~/(xy|xy[^z]*) 

ou plus court:

 ~/xy(|[^z]*)