匹配除了 ~/xyz* 之外的所有 ~/xy* 的 glob 是什么?

匹配除了 ~/xyz* 之外的所有 ~/xy* 的 glob 是什么?

这是行不通的:~/xy*~~/xyz*.

我知道这是$HOME/xy*~$HOME/xyz*可行的,但我想知道是否有一种方法可以使用以 开头的路径前缀(~例如~/or~user/或 )达到相同的效果~nameddir/

答案1

~仅在极少数情况下扩展

在这里,您可以执行~/xy^z*~/xy(*~z*)

答案2

基本上,您期望 shell 将波浪号扩展到$HOME单词的开头和中间的某个位置,但这种情况不会发生:第一个~将扩展到$HOME但不会扩展到其他(在这种情况下,由于extendedglob被设置) ,它们被视为全局运算符)...
如上所述,有很多方法可以做到这一点 - 甚至桑迪普的建议是可以的,因为zsh理解ksh-like glob(这是bash复制它们的地方):

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

答案3

您可以执行否定:

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

或更短:

~/xy(|[^z]*)

相关内容