一致式に正規表現リテラルを作成するには?

一致式に正規表現リテラルを作成するには?

この質問は正規表現を書く正しい方法についてです。言葉bashで一致する式で。

zsh では、期待どおり次の一致が成功します。

% [[ ' 123 ' =~ '^ [0-9]+ $' ]]; echo $?
0

Bashではそうではありません。

$ [[ ' 123 ' =~ '^ [0-9]+ $' ]]; echo $?
1

私はこのゲームがbashでうまく動作することを知っています。

$ ( regexp='^ [0-9]+ $'; [[ ' 123 ' =~ $regexp ]]; echo $? )
0

...しかし、正規表現を中間変数に割り当てる必要があります。


私の質問は:ランダムな正規表現を書く方法です。言葉bashのマッチ式で?

ベストアンサー1

Bashリファレンスマニュアルで提案されているように変数に入れることをお勧めします。3.2.4.2 条件付き構成:

シェル変数に正規表現を格納することは、シェル固有の文字を引用するときに問題を回避する便利な方法であることがよくあります。場合によっては、引用符を使用せずに正規表現を文字通り指定したり、シェルの引用符の削除に注意しながら、正規表現で使用されている引用符を追跡することは困難です。シェル変数を使用してパターンを保存すると、これらの問題を軽減できます。

ただし、これをBash拡張テストに直接書き込むには、引用符を削除してスペースをエスケープする必要があります。

$ [[ ' 123 ' =~ ^\ [0-9]+\ $ ]]; echo $?
0

おすすめ記事