为什么以下返回语法错误:
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
数组中。如果使用捕获组,每个组将作为单独的元素存储在数组中。