Bash 中有几个地方使用了模式匹配。
Bash 中的模式匹配是通过正则表达式还是通配符(与文件名扩展中的样式相同)完成的?
在 Bash 中,正则表达式完成的模式匹配仅用于
[[..]]
with=~
运算符吗?其他地方没有吗?还有其他地方可以通过正则表达式进行模式匹配吗?
答案1
从man bash
:
当使用 == 和 != 运算符时,运算符右侧的字符串被视为模式,并根据模式匹配下描述的规则进行匹配,就像启用了 extglob shell 选项一样。
为了=~
:
还可以使用附加二元运算符 =~,其优先级与 == 和 != 相同。使用时,运算符右侧的字符串被视为扩展正则表达式并进行相应匹配(如 regex(3) 中)。
因此,regex(3)
仅用于在以下情况下匹配模式=~
否则,按如下方式完成:
路径名扩展:
分词后,除非设置了 -f 选项,否则 bash 会扫描每个单词中的字符 *、? 和 [。如果出现这些字符之一,则该单词被视为一种模式,并替换为按字母顺序排序的与该模式匹配的文件名列表(请参阅下面的模式匹配)。
除了下面描述的特殊模式字符之外,模式中出现的任何字符都与自身匹配。 NUL 字符不能出现在模式中。反斜杠转义后面的字符;匹配时转义的反斜杠将被丢弃。如果要按字面匹配特殊模式字符,则必须用引号引起来。
还访问外部全局变量它扩展了几个模式匹配运算符