2

请看一下这个简单的 bash 脚本:

#!/bin/bash
if [[ $1 =~ a* ]]; then
 echo "match"
fi

无论第一个参数提供了什么,似乎总是打印“匹配”。(在 bash 3.2 和 4.x 上测试)

问题:
我做错了什么?

4

2 回答 2

5

正则表达式的a*意思是“匹配零次或多次出现的字母 a”。因此,如果您输入foo,则匹配零a,因此表达式为真。如果您输入bara则匹配一个,因此它也是正确的。您输入的任何输入都将匹配。

a+如果要匹配出现的一个或多个字母,请尝试更改为a

$ [[ foo =~ a+ ]] && echo match || echo "no match"
no match

$ [[ bar =~ a+ ]] && echo match || echo "no match"
match
于 2013-02-27T14:30:52.683 回答
1

只是猜测:'a*' 将匹配 'a' 零次或多次,这几乎匹配任何字符串。所以我会说你必须使用 'a+' 来匹配 'a'一次或多次;并且您可能希望添加 '^' 或 '$' 以匹配行的开头/结尾,具体取决于您想要实现的目标。

干杯,亚历克斯

编辑:啊,太晚了 ;-) 至少我的猜测似乎是正确的 ;-)

于 2013-02-27T14:33:48.977 回答