条件正規表現エラー


14
string=123456

if [ $string == 123456 ]; then
echo 123
fi

これは正常に機能しますが、==を=〜に変更すると、このエラーが発生します。

./test: line 3: [: =~: binary operator expected

この場合、の使用は=~間違っています。=~パターン(割り当ての左側)とregex、右側の正規表現を比較します。最も単純な形が似渡された正規表現'[0-9][0-9]'
バレンティンBajrami

9
@ val0x00ffしかし123456有効なRE
roaima

@roaimaは、しかし、正規表現のエンジン、文字列などの終了バック参照、文字セット、文字列の開始を表すメタ文字で知られ、合意
バレンティンBajrami

回答:


28

Bash正規表現マッチングは、二重角括弧内でのみ機能します[[ ... ]]

string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123

@Kusalananda:編集に関しては、ダブルブラケット式の左側に引用符は必要ありませ[[ ... ]]ん。単語の分割やパス名の展開が発生しないためです。シングルブラケット[ ... ](両側)を使用し、ダブルブラケット式の右側にある場合にのみ必要です。
-user000001

@ user000001あなたが正しい間、そうする必要がない限り、反射によってすべての変数を引用する方がはるかに良いです。より安全な習慣です。
ジョー

@ジョー:疑わしい場合は、引用することに同意しました...すでに正解の編集であったため、これについてのみ言及しました。それが最初の改訂からそこにあったならば、私はこれについてコメントしなかっただろう。
user000001
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.