语法错误expr

时间:2014-08-30 23:00:33

标签: bash expr

为什么以下返回语法错误:

stringZ=abcABC123ABCabc
echo `expr match "$stringZ" 'abc[A-Z]*.2'`

这适用于我的ubuntu机器,但当我在运行OS X 10.9.4的mac上试用时,我得到expr: syntax error

2 个答案:

答案 0 :(得分:4)

这看起来像是一个bash版本的区别。 :语法适用于我的OSX 10.9.4机器(有bash 3.2.51,不是最新的):

echo `expr "$stringZ" : 'abc[A-Z]*.2'`

答案 1 :(得分:2)

expr非常老套。在较新的bash上,您可能更喜欢使用更现代的正则表达式语法:

re='abc[A-Z]*.2'
[[ $stringZ =~ $re ]] && echo ${#BASH_REMATCH}

自bash 3.0版起,=~运算符可用。为了在旧版本的bash中实现最大兼容性,it is recommended将要匹配的模式存储在单独的变量中,并在不带引号的情况下展开它。成功匹配存储在BASH_REMATCH数组中。如果使用捕获组,则每个组将作为单独的元素存储在数组中。