グローブパターンにおける「[--0]」の意味

グローブパターンにおける「[--0]」の意味

私は「Glob」と「Globing Pathnames」について読んでいましたが(私にとって)奇妙な部分が見つかりました。マニュアルページ:

「[--0]」は、「-」、「.」、「0」の3文字と一致します。 「/」は一致できないためです。

混乱しています! 2つのダッシュと1つの一致0はどうですか.?ここでキャラクターはどんな役割を果たしますか/?これはマニュアルページのバグですか?

答え1

段落の冒頭で説明したようにそのマニュアルページ、「-」の特徴、2文字の間に位置するときは一連の文字を表し、「-」文字は角かっこの間の最初または最後の文字として配置される場合、文字通りの意味を持ちます。したがって、最初のダッシュは実際には「-」文字を表し、2番目のダッシュは範囲指定子です。したがって、パターン全体は「-」と「0」の間のすべての文字で構成されます。 C/POSIX ロケール (通常は他のロケールではない) では次のようになります。

-
.
/
0

そして'/'は一致できないため、このパターンは「-」、「。」、「0」の3文字と一致します。

答え2

これはマニュアルページ自体とは何の関係もありません。これは、現在見ているマニュアルページに関するglobパターン構文の説明です。

glob モードでは、角括弧で文字セットを区切ります。たとえば、[abc]任意の文字aまたはbに一致しますc。このパターンは、、ととfo[abc]一致します(ただし、または、またはは一致しません)。foafobfocfoofofoab

括弧内の文字は-特別な意味を持ちます。つまり、文字範囲を形成するために使用されます。したがって0、または一致する代わりに、パターン-はすべての数字と一致します。範囲は他の範囲と個々の文字と組み合わせることができます。たとえば、ASCII エンコードのすべての文字またはアンダースコアと一致します。9[0-9][A-Za-z_]

マイナス記号は、構文的に整列されている場合にのみ範囲インジケータとして解釈されます。-つまり、マイナス記号が角かっこ内の最初または最後の文字である場合、または他の範囲の直後に続く場合です。したがって[--0]、最初のものは-自分自身を表し、2番目のものは範囲インジケータなので、このパターンは-現在のロケール内-との間のすべての文字と一致します。0

内部にASCIIコードエンコーディング、範囲には 4 文字が含まれます: -./0。この文字は/常にディレクトリ区切り文字として解釈されるため、ファイル名には表示できません。したがって、パターンは、および[--0]3文字のみ一致します。-.0

ASCII以外のロケールでは、パターンは他の文字セットと一致する可能性があります。ロケール設定が文字範囲に与える影響システムとアプリケーションの間には一定の違いがあります。

ほとんどの正規表現エンジンは、文字の範囲にシェルのglobパターンと同じ構文を使用しますが、2つの違いがあります。

  • glob パターンで開く括弧の後の最初の文字が a の場合、パターン!はすべての文字と一致します。いいえコレクションから。正規表現では、文字は^同じ役割を果たします。一部のシェル^もこれをサポートしています!
  • 一部の正規表現バリアントでは、次の文字が一致や一致\などの特別な意味を失う可能性があります。他の正規表現の変形やglobパターンでは、文字セットのバックスラッシュは特別な意味を持ちません。セットにいる場合は、最初に来る必要があります(空のセットを指定することはできません。閉じる角かっこまたは後に表示される文字に一致する不完全なパターンです)。[\[\]\-a][]-a][]

関連情報