在bash中使用if子句中的正则表达式

Modified on: Sat, 30 Jun 2018 04:49:30 +0800

看看这个块:

#!/bin/bash str="m.m" if [[ "${str}" =~ "m\.m" ]]; then echo "matched" else echo "not matched" exit 1 fi exit 0

这应该打印“匹配”,但事实并非如此。我哪里错了?

最佳答案

您需要删除正则表达式匹配中的引用。

if [[ ${str} =~ m\.m ]]; then

来自bash手册页:

  

[...]另外一个二元运算符=〜可用,具有相同的
                优先级为==和!=。当它被使用时,字符串为
                经营者的权利被视为延长的正常表达 -
                相应地匹配(如正则表达式(3))。返回值
                如果字符串与模式匹配则为0,否则为1。如果
                正则表达式在语法上是不正确的,有条件的
                表达式的返回值是2.如果shell选项为nocasematch
                启用后,执行匹配而不考虑情况
                字母字符。 可以引用模式的任何部分
                强制它匹配为字符串。

因此,使用引号,您将使用旧的字符串匹配。

如果你在模式中需要空格,那就逃避它们:

str="m   m"
if [[ ${str} =~ m\ +m ]]; then
作者:,Mat

相关问答

添加新评论