2017-10-11 26 views
0

アスタリスクを含む変数との正規表現のマッチングを試みています。Bash:二重括弧内のファイル名展開を避ける正規表現テスト

Bashの次のコマンドセットは、オペレータの左側の変数にアスタリスクを付けてファイル名拡張を行います。

test='part1 * part2' 
[[ "$test" =~ ^(.+)\ .\ (.+)$ ]] && echo $BASH_REMATCH 

での結果:part1 FILE1 FILE2 part2

しかし、それは生じるはずである:私は検索と検索が、これが起こっている理由を理解することはできませんしているpart1 * part2

答えて

1

私は質問しながら実現しましたが、正規表現のマッチングはうまくいきます。二重括弧内には拡張があります。結果がエコーされると、一致がの後で展開が発生しています。 $BASH_REMATCH変数にはアスタリスクが含まれており、二重引用符で囲む必要があります。

コマンドの正しいセットは次のとおりです。

test='part1 * part2' 
regex='^(.+) . (.+)$' 
[[ "$test" =~ $regex ]] && echo "$BASH_REMATCH" 

UPDATE:テストの外に設定する正規表現。

+0

(他に明白な理由がない限り、原則として、常に*拡張*を引用する必要があります)。 –

+1

正規表現をテストの外に宣言することも良い習慣です。なぜなら、読みやすく(エスケープする必要はありません)、b)すべてのBashバージョンで動作するからです([here](http://mywiki.wooledge.org/BashGuide/Patterns)を "正規表現"の下に置きます)。 –

+1

ありがとう@BenjaminW。、私は答えを更新しました。 – owenh000

関連する問題