浅说通字母配符[A-Z][a-z]的匹配问题
浅说通字母配符[A-Z][a-z]的匹配问题
内容概要:
1:发现并察觉通字母配符,例如[a-f],[A-F]匹配的结果不全(缺少);
2:查看手册,手册给出的方法与实际结果不符;
3:通过列举方法,计算规律,得出正确的字母通配符结果;
解决的问题:
用正确的字母通配符的规律进行查找;
问题详述:
今天,在上课,练习字母通配符时我们发现了一个貌似是bug的问题,
举个例子:
首先创建了以下文件:
touch f{a,b,c,d,e,A,B,C,D,E};
然后使用通配符执行命令:ll f[a-e] 和命令:ll f[A-E]
得到的结果却并不是我们想象中的fa-fe或fA-fE这样列出
来,而是这样:
显然,第一个结果中应该有的"fE"没有,而第二个结果中应该
有的"fa"也没有,这使我们感到很意外,通过查阅glob通配符
的帮助手册,发现手册给出的结果应该是我们预想中的样子:
Ranges
There is one special convention: two characters separated by '-' denote a range. (Thus, "[A-Fa-f0-9]" is equivalent to "[ABCDEFabcdef0123456789]".) One may include '-' in its literal meaning by making it the first or last character between the brackets. (Thus,"[]-]" matches just the two characters ']' and '-', and "[--0]" matches the three characters '-', '.', '0', since '/' cannot be matched.)
然而结果却并不是这样,再变换一下字母,我们发现了更有趣的现象:
原来,通过以上实践案例,我们可以得出以下结论:
用这种指定字母通配符列出的方式时:其规则是:
对于开头的字母:如果是小写,则小大都显示;如果是大写,小写就不显示了.
对于结尾的字母:如果是小写,大写就不显示了,如果是大写,则小大都显示.
注意: 无论是大写还是小写,匹配的结果都是忽略大小写的,也就是说无论你是[a-z]
还是[A-Z],匹配出来的结果,除了首尾以外,都是既有大写,有些小写的.
所以使用这种方法,要想匹配出全部的结果应该是[a-Z],即:"头小尾大".
因此,我们要向真正区分大小写,还是要用[:lower:][:upper:]
转载于:https://blog.51cto.com/kurosakisora/1830904