2016-11-13 9 views
0

なんらかの理由で、次の正規表現の一致が機能していないようです。Bash正規表現の1文字に一致する

string="#Hello world"; 
[[ "$string" =~ 'ello' ]] && echo "matches"; 
[[ "$string" =~ 'el.o' ]] && echo "matches"; 

最初のコマンドは(期待通りに)成功しますが、2番目のコマンドは成功しません。

この期間を正規表現で1文字として扱うべきではありませんか?

答えて

3

期間を引用すると、正規表現のメタ文字ではなく、リテラル文字として扱われます。正規表現全体を引用する場合は、正規表現の一致規則が有効でない変数で行い、次にパラメータを引用符で囲まずに展開するのがベストプラクティスです([[ ... ]]の中で行うのが安全です)。

regex='el.o' 
[[ "$string" =~ $regex ]] && echo "matches" 
+0

だから、私はそれが '[['コマンドのためだけの別名ではなく、舞台裏で起こっていくつかの魔法モジョが存在することを意味推測しています、 右? –

+0

修正; '['は 'test'のエイリアスですが、' [['は' bash'の複合コマンドの一つを紹介する(非アルファベットの)キーワードです。それに含まれる式を評価するための独自のルールがあります。 – chepner

+0

'[['キーワード?私はそれについてもっと読むためにGoogleに何を知っているのか厳しい時を過ごしている。 –

0
string="#Hello world"; 
[[ "$string" =~ ello ]] && echo "matches"; 
[[ "$string" =~ el.o ]] && echo "matches"; 

テスト

$ string="hh elxo fj" 
$ [[ "$string" =~ el.o ]] && echo "matches"; 
matches 
関連する問題