if [[ 23ab = *ab ]] ; then echo yes; fi
以上代码是正则表达式吗?
请参阅以下内容:
if [[ 23ab =~ [0-9]{1,2}ab ]] ; then echo yes; fi
那么哪一行是正则表达式?如果第一行不是正则表达式,为什么我们使用*时它会起作用?
如果是,但是当我们使用=~
代替=
时,就像
if [[ 23ab = [0-9]{1,2}ab ]]
,它现在无效。
你能解释两条线之间的区别吗?
答案 0 :(得分:4)
[[ $a =~ $b ]]
是正则表达式匹配。在此语法中,*
匹配前一个字符或模式的0-n个实例。
[[ $a = $b ]]
是一种全局模式匹配。在此语法中,*
匹配任何类型的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中的正则表达式。