请看一下这个简单的 bash 脚本:
#!/bin/bash
if [[ $1 =~ a* ]]; then
echo "match"
fi
无论第一个参数提供了什么,似乎总是打印“匹配”。(在 bash 3.2 和 4.x 上测试)
问题:
我做错了什么?
正则表达式的a*
意思是“匹配零次或多次出现的字母 a”。因此,如果您输入foo
,则匹配零a
,因此表达式为真。如果您输入bar
,a
则匹配一个,因此它也是正确的。您输入的任何输入都将匹配。
a+
如果要匹配出现的一个或多个字母,请尝试更改为a
。
$ [[ foo =~ a+ ]] && echo match || echo "no match"
no match
$ [[ bar =~ a+ ]] && echo match || echo "no match"
match
只是猜测:'a*' 将匹配 'a' 零次或多次,这几乎匹配任何字符串。所以我会说你必须使用 'a+' 来匹配 'a'一次或多次;并且您可能希望添加 '^' 或 '$' 以匹配行的开头/结尾,具体取决于您想要实现的目标。
干杯,亚历克斯
编辑:啊,太晚了 ;-) 至少我的猜测似乎是正确的 ;-)