bash extglobを使用したネガパターンの一致

bash extglobを使用したネガパターンの一致

7つのファイルセットがあるとしましょう。

item1_data
item2_data_more
item3_data
item4_data
item5_data_more
other6_data
other7_data_more

itemで始まるが終わらない3つを一致させたいと思いますmore。これが例のシナリオであることを考えると、単に肯定的なitem*data?一致パターン(または単純な変形)を一致させるだけでは不十分であることを認めるべきです。

私はbash活性化を使用していますextglob。簡単な場合は、マニュアルページの説明で十分です("!(pattern‐list)与えられたパターンの1つを除くすべての項目と一致))しかし、ここではペアマッチングを達成する必要がありますが、否定的なマッチングがitem必要dataです。

shopt -s extglob                                                # Enable extended globbing
touch {item{1,3,4},other6}_data {item{2,5},other7}_data_more    # Example data set

ls !(*more)                                                     # Non-"item" files too
item1_data  item3_data  item4_data  other6_data

ls item*!(more)                                                 # All "item" files
item1_data  item2_data_more  item3_data  item4_data  item5_data_more

ls item!(*more)                                                 # Works as required
item1_data  item3_data  item4_data

なぜ2番目は失敗し、3番目は成功したのですか?私はワイルドカードがどの場所でも動作しなければならないと思いましたが、明らかにそうではありませんでした。誰かが私を実現できますか?

ベストアンサー1

item*各ファイルの完全なファイル名が一致し、通常は末尾の空の文字列が一致するため、2番目の式が失敗すると言いたいと思います!(more)

おすすめ記事