我用正则表达式好友制作原型并调试我的正则表达式。 RegEx Buddy 允许我在多种不同的正则表达式引擎类型(.NET、Java、Perl、GNU BRE、GNU ERE、POSIX、BRE、POSIX ERE 等)之间进行选择。
bash 使用什么正则表达式引擎(例如 inif
和case
语句)?我正在运行 Centos 5.5 32 位和 bash 3.2.25(1):
[kevin@mon01 scratch]$ bash --version
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
我猜它会是 GNU BRE 或 GNU ERE?
答案1
bash(以及一般的 POSIX shell)不在语句中使用正则表达式case
,而是全局模式。
对使用运算符的正则表达式的支持有限=~
;详情请见:http://mywiki.wooledge.org/BashGuide/Patterns,
它表示bash
使用扩展正则表达式 (ERE)。
答案2
if
Bash 在和语句中不使用任何上述类型的正则表达式case
。
相反,它使用 shell glob 模式,这种模式的功能不如任何类型的正则表达式。相对较新的 bash 版本还允许使用扩展的 glob 模式,这些模式在表达上等于没有(行)锚点但包含否定项的正则表达式,但其语法与上述任何正则表达式类型不同。
shopt -s extglob
但请注意,必须先在 shell 脚本中或以交互方式使用扩展 shell glob 。
在一个特殊位置,即在[[ ]]
条件命令内,=~
二元关系允许根据右侧的扩展正则表达式 ERE 检查左侧的字符串。
答案3
根据链接的 Bash 指南,Bash(自 3.0+ 版本起)使用:“扩展正则表达式 (ERE)方言。”
有关该方言的更多信息可以找到这里。