zsh-字符串通配符
通配符(glob)是 shell 中的一个比较重要的概念,可以认为是正则表达式的简化版本。通配符在字符串匹配和文件名搜索等方面非常有用。本篇只讲它在字符串匹配上的用法
通配符的基本用法
之前在讲字符串匹配判断时,通配符出现过,就是 *"$str"*
两边的星号。
星号是最常用的通配符,用于匹配任意数量(包括 0 个)的任意字符。
以上是通配符的基本用法,总结一下。
通配符
含义
*
任意数量的任意字符
?
任意一个字符
[abcd]
abcd 中的任意一个字符
[^abcd]
除 abcd 外的任意一个字符
[a-c]
a 和 c 之间的一个字符
[a-cB-Dxyz]
a 和 c 之间、B 和 D 之间以及 xyz 中的一个字符
<1-100>
1 和 100 之间的整数
<-50>
0 和 50 之间的整数
<100->
大于 100 的整数
<->
任意正整数和 0
([a-c]|<1-100>)
a 和 c 之间的一个字符或者 1 和 100 之间的整数
加强版通配符
Zsh 还支持加强版通配符,功能更多一些。如果使用加强版的通配符,需要先在代码里加上 setopt EXTENDED_GLOB
。
通配符
含义
匹配的样例
^abc
除了 abc 外的任意字符串
aaa
abc^abc
以 abc 开头,但后边不是 abc 的字符串
abcabd
a*c~abc
符合 a*c 但不是 abc 的字符串
adc
a#
任意数量(包括 0)个 a
aaa
b##
一个或者多个 b
b
(ab)##
一个或者多个 ab
abab
(#i)abc
忽略大小写的 abc
AbC
(#i)ab(#I)c
忽略大小写的 ab 接着 c
ABc
(#l)aBc
a 和 c 忽略大小写,但 B 必须大写 的 aBc
aBC
(#a1)abc
最多错(多或缺也算)一个字符的 abc
a2c 或 ab 或 abcd