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 に答える