Maj*_*imi 11 bash regular-expression
看看这个 if 块:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
这应该打印“匹配”,但它没有。我哪里错了?
Mat*_*Mat 23
您需要删除正则表达式匹配中的引用。
if [[ ${str} =~ m\.m ]]; then
Run Code Online (Sandbox Code Playgroud)
从 bash 手册页:
[...] 可以使用额外的二元运算符 =~,其优先级与 == 和 != 相同。使用时,运算符右边的字符串被认为是扩展的正则表达式?sion 并相应地匹配(如在 regex(3) 中)。如果字符串与模式匹配,则返回值为 0,否则为 1。如果正则表达式在语法上不正确,则条件表达式的返回值为 2。如果启用了 shell 选项 nocasematch,则执行匹配时不考虑字母字符的大小写。 可以引用模式的任何部分以强制将其作为字符串进行匹配。
因此,对于引号,您使用的是古老的字符串匹配。
如果您在模式中需要空格,只需将它们转义即可:
str="m m"
if [[ ${str} =~ m\ +m ]]; then
Run Code Online (Sandbox Code Playgroud)