语法错误expr



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

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

这在我的ubuntu机器上有效,但当我在运行OS X 10.9.4的mac上尝试时,我会得到expr: syntax error

这似乎是bash版本的差异。:语法适用于我的OSX 10.9.4机器(它有bash 3.2.51,不是很新):

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

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

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

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

相关内容

最新更新