以下が構文エラーを返すのはなぜですか:
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
配列に格納されます。キャプチャ グループが使用されている場合、各グループは配列内の個別の要素として格納されます。