3

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

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

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

4

2 回答 2

5

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

echo `expr "$stringZ" : 'abc[A-Z]*.2'`
于 2014-08-30T23:08:15.673 回答
3

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

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

=~运算符从 bash 版本 3.0 开始可用。为了最大限度地兼容旧版本的 bash,建议将要匹配的模式存储在单独的变量中,并在不带引号的情况下对其进行扩展。成功的匹配存储在BASH_REMATCH数组中。如果使用捕获组,每个组将作为单独的元素存储在数组中。

于 2014-08-30T23:10:20.900 回答