为什么以下返回语法错误:
stringZ=abcABC123ABCabc
echo `expr match "$stringZ" 'abc[A-Z]*.2'`
这适用于我的ubuntu机器,但当我在运行OS X 10.9.4的mac上试用时,我得到expr: syntax error
?
答案 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
数组中。如果使用捕获组,则每个组将作为单独的元素存储在数组中。