〜/ xyz *を除くすべての〜/ xy *と一致するglobは何ですか?

〜/ xyz *を除くすべての〜/ xy *と一致するglobは何ですか?

これはうまくいきません:~/xy*~~/xyz*

これがうまくいくことを知っていますが、(または)で始まるパスプレフィックスを使用して同じ効果を得る$HOME/xy*~$HOME/xyz*方法があるかどうか疑問に思います。~~/~user/~nameddir/

答え1

~まれな場合にのみ拡張されます。

~/xy^z*ここからまたはを実行できます~/xy(*~z*)

答え2

デフォルトでは、シェルはチルダを$HOME単語の先頭と中間のどこかに拡張すると予想していますが、そのようなことは起こりません。最初のものは~拡張されますが、$HOME他のものは拡張されません(この場合はextendedglob設定のため)。グローバル演算子として扱われます)...
上記のように、これを行う方法はいくつかあります。山ディップzshUnderstanding ksh-like globs(bashコピー先)のため、提案は問題ありません。

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

答え3

否定を行うことができます。

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

またはより短く:

~/xy(|[^z]*)

関連情報