请看一下这个简单的bash脚本:
#!/bin/bash
if [[ $1 =~ a* ]]; then
echo "match"
fi
无论作为第一个参数提供什么,似乎总是打印“匹配”。 (在bash 3.2和4.x上测试)
问题:
我做错了什么?
答案 0 :(得分:5)
正则表达式a*
表示“匹配零个或多个字母a”。因此,如果输入foo
,则匹配零a
,因此表达式为true。如果您输入bar
,则会匹配一个a
,因此也是如此。您输入的任何输入都将匹配。
如果您想匹配字母a+
的一个或多个匹配项,请尝试更改为a
。
$ [[ foo =~ a+ ]] && echo match || echo "no match"
no match
$ [[ bar =~ a+ ]] && echo match || echo "no match"
match
答案 1 :(得分:1)
猜猜: ' A *'会匹配' a'零次或多次,几乎匹配任何字符串。所以我说你必须使用' a +'而是匹配' a' 一个或多个次;而且你可能想要添加' ^'或者' $'根据你想要达到的目标,在开始/结束时匹配。
干杯,亚历克斯
编辑:啊,太晚了;-)至少看起来我的猜测是正确的; - )