zsh中glob模式匹配异常:为何指定命令未返回预期文件?
zsh通配符匹配结果不符预期的原因分析
先拆解你使用的通配符模式.*sh*c*[cke](.)的具体规则:
.*:匹配以.开头的任意字符序列(自动排除.和..)sh:要求文件名中包含子串shc:要求文件名中sh之后的位置必须出现字符c*:匹配任意长度的字符序列(包括空字符)[cke]:要求文件名最后一个字符必须是c、k或e(.):zsh的glob限定符,仅匹配普通文件(排除目录)
接下来逐个分析四个文件的匹配情况:
匹配成功的文件
.sh_once:
文件名包含sh子串,且包含c(once中的c),最后一个字符是e(符合[cke]规则),完全满足通配符要求,因此被匹配。.zshrc.mbook:
文件名包含sh(zsh中的sh)和c(zshrc中的c),最后一个字符是k(mbook的结尾),符合[cke]规则,因此被匹配。
匹配失败的文件
.zshrc:
虽然文件名包含sh和c,且最后一个字符是c(符合[cke]),但通配符要求sh之后出现的c必须位于最后一个字符之前——也就是c后面需要有至少一个字符来匹配[cke]。但.zshrc的c就是最后一个字符,没有多余字符满足这个要求,因此不匹配。.bashrc:
同理,文件名包含sh(bash中的sh)和c(rc中的c),但c是最后一个字符,无法满足c之后有字符匹配[cke]的要求,因此不匹配。
内容的提问来源于stack exchange,提问作者user1934428
相关产品推荐
相关产品推荐

