Bash:正则表达式

时间:2013-02-27 14:25:24

标签: regex bash

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

#!/bin/bash
if [[ $1 =~ a* ]]; then
 echo "match"
fi
无论作为第一个参数提供什么,

似乎总是打印“匹配”。 (在bash 3.2和4.x上测试)

问题:
我做错了什么?

2 个答案:

答案 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' 一个或多个次;而且你可能想要添加' ^'或者' $'根据你想要达到的目标,在开始/结束时匹配。

干杯,亚历克斯

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