if [[ 23ab = *ab ]] ; then echo yes; fi
上面的代码是正则表达式吗?
请参阅以下内容:
if [[ 23ab =~ [0-9]{1,2}ab ]] ; then echo yes; fi
那么哪一行是正则表达式?如果第一行不是正则表达式,为什么当我们使用 * 时它会起作用?如果是这样,但是当我们不=~
只是使用=
, like
if [[ 23ab = [0-9]{1,2}ab ]]
时,它现在不起作用。
你能解释一下这两条线的区别吗?
[[ $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 中不被视为正则表达式。