2
  1. if [[ 23ab = *ab ]] ; then echo yes; fi

    上面的代码是正则表达式吗?

    请参阅以下内容:

  2. if [[ 23ab =~ [0-9]{1,2}ab ]] ; then echo yes; fi

那么哪一行是正则表达式?如果第一行不是正则表达式,为什么当我们使用 * 时它会起作用?如果是这样,但是当我们不=~只是使用=, like if [[ 23ab = [0-9]{1,2}ab ]]时,它​​现在不起作用。

你能解释一下这两条线的区别吗?

4

1 回答 1

4

[[ $a =~ $b ]]是正则表达式匹配。在此语法中,*匹配前一个字符或模式的 0-n 个实例。

[[ $a = $b ]]是一种 glob 样式的模式匹配。在此语法中,*匹配任何类型的 0-n 个字符。

请注意,将 bash 中的正则表达式存储在变量中很重要。那是:

re='[0-9]{1,2}ab'
[[ $foo =~ $re ]]

实际上可能与

[[ $foo =~ [0-9]{1,2}ab ]]

...取决于您正在运行的 bash 版本。始终使用变量将防止这引起问题。

请注意,这些都不同于

re='[0-9]{1,2}ab'
[[ $foo =~ "$re" ]] ## <- LITERAL SUBSTRING MATCH _NOT_ REGULAR EXPRESSION MATCH

...在这种情况下,引用使$re文字的内容,即。在现代 bash 中不被视为正则表达式。

于 2013-06-24T23:55:12.287 回答