2014-08-30 88 views
2

爲什麼下面返回一個語法錯誤:語法錯誤EXPR

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

這工作我的Ubuntu的機器上,但是當我嘗試在我的Mac運行OS X 10.9.4我得到expr: syntax error

+0

您是否試過使用'echo $(expr match「$ stringZ」'abc [A-Z] *。2')'? – 2014-08-30 23:04:43

+0

@TomFenech同樣的問題。 – rudolph9 2014-08-30 23:07:34

回答

4

這似乎是一個bash版本的差異。我的OSX 10.9.4機上的:語法作品(其中有慶典51年2月3日,不太電流):

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

在線文檔:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/expr.1.html – 2014-08-30 23:11:20

2

expr是很老式的。在較新的bash,那麼你可能更願意使用更現代的正則表達式語法:

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

=~運營商是因爲bash的3.0版可用。爲了最大程度地兼容舊版本的bash,it is recommended將要匹配的模式存儲在單獨的變量中,並將其展開而不帶引號。成功的匹配存儲在BASH_REMATCH陣列中。如果使用捕獲組,則每個組將作爲數組中的單獨元素存儲。