Mit glob Pattern-Matching, Verwenden Sie eine Zeichenklasse: [0-9]
entspricht 0
, 9
, und jedes Zeichen zwischen ihnen im Zeichensatz, die aus den Ziffern 1
bis 8
bestehen. In Unicode- und Subset-Zeichensätzen (US-ASCII, Latin-1, UTF-8) werden alle 10 lateinischen Ziffern abgeglichen.
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
regulären Ausdruck („regex“) anstelle von glob passende passende, können Sie das Muster etwas verkürzen kann:
if [[ $var1 =~ 123[0-9]{3} ]] ; then echo "Pattern matched"; fi
Mit =~
, nur die Regex einen Teil der Zeichenfolge übereinstimmen muss, nicht die ganze Sache. Sie brauchen also nicht das Äquivalent der führenden und nachgestellten *
s, die Sie im glob-Muster finden.
Mit der Syntax {n}
können Sie eine genaue Anzahl von Wiederholungen des vorherigen Musters angeben, sodass Sie das Muster selbst in der Regex nicht wiederholen müssen. Sie können auch einen beliebigen Bereich von Wiederholungszählungen anpassen, indem Sie ein Minimum und ein Maximum angeben, z. B. [0-9]{2,4}
, um entweder zwei, drei oder vier Ziffern hintereinander zuzuordnen.
Schließlich könnten Sie auch eine benannte Zeichenklasse verwenden, um Ziffern zu finden. Je nach Ihrem Gebietsschema kann [[:digit:]]
exakt mit [0-9]
übereinstimmen oder Zeichen aus anderen Skripts mit der Unicode-Eigenschaft "Number, Decimal Digit" enthalten.
if [[ $var1 =~ ,123[[:digit:]]{3} ]] ; then echo "Pattern matched"; fi
Schön gemacht. Quibble: '[0-9]' stimmt mit den Zeichen im Bereich von '0' bis '9' _ überein, die durch den (effektiven) 'LC_CTYPE'-Wert_ definiert sind (siehe 'locale'). In den nun allgegenwärtigen UTF-8-basierten Sprachumgebungen stimmt dies mit den ASCII/Latin-1-Zeichen "0" bis "9" überein, da diese Kodierungen echte _subsets_ von Unicode sind. Im Gegensatz dazu stimmt '[[: digits:]]' 'nicht nur mit' 0' bis '9' überein, sondern mit _additional_ characters in UTF-8, je nachdem, was der Unicode-Standard als Ziffer betrachtet. – mklement0