文字の組み合わせのすべての文字と Bash の組み合わせ値自体を一致させます。

文字の組み合わせのすべての文字と Bash の組み合わせ値自体を一致させます。

Bashで正規表現を練習するときは、括弧内の完全なセット/検索パターンを一致させようとします。

代わりに、その中のすべての文字を一致させます。

例えば、

cd
touch a.c a.h a.o a.cho
ls *.[cho]

マッチls:

a.c
a.h
a.o 

しかし、の完全なコレクションと一致しませんa.cho

セット全体が一致しないのはなぜですか。どうすればよいですか?

答え1

ここでは、正規表現を使用せずにファイル名のグロービングパターンを使用します。

単一文字のみが一致するため(ファイル名ワイルドカードパターンと正規表現の間で同じです)、3文字(「と」のいずれかを意味)[...]と一致しません。cho[cho]cho

useで始まるすべてのa.名前と一致しますa.*

、またはで終わるすべての名前を一致させるには、まずa.シェルオプションをに設定して使用します。chochoextglobshopt -s extgloba.@([cho]|cho)

このような中括弧拡張はa.{c,h,o,cho}コマンドラインにファイル名を生成しますが、ファイルが実際に存在するという保証はありません。

答え2

バッシュが使えますサポート拡張これはいいえパターンですが文字列リスト

ls *.{c,h,o,cho}

シェル拡張今後ls コマンドは次のように実行されます。

ls *.c *.h *.o *.cho

中かっこ拡張はファイル名拡張の前に発生するため、中かっこ内に glob パターンを入れることができます。

ls *.{[cho],cho}

関連情報