Warum gibt der folgende reguläre Ausdruck valid
aus , wenn der Name hdpworker01
ist ?
name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid
Was ich versuche zu tun, ist valid
zu drucken nur wenn der Name mit worker[0-999]
übereinstimmt .
Beispiel für erwartete Ergebnisse:
- Für
name=worker01
:valid
- Für
name=hdpworker01
:keine Ausgabe
Akzeptierte Antwort:
Ein regulärer Ausdruck ist standardmäßig nicht am Anfang oder Ende einer Zeichenfolge verankert. Dies ist anders als z. Globbing-Muster für Dateinamen. Das bedeutet, dass der Ausdruck irgendwo in der gegebenen Zeichenkette zutreffen kann.
Um Ihren Ausdruck am Anfang der Zeichenfolge zu verankern, verwenden Sie
^worker[[:digit:]]
Um es zusätzlich am Ende der Zeichenfolge zu verankern und ein bis drei Ziffern zuzulassen, verwenden Sie
^worker[[:digit:]]{1,3}$
Wenn Sie worker10
abgleichen möchten aber nicht worker01
oder worker003
(keine mit Nullen gefüllten Zahlen), verwenden Sie
^worker([0-9]|[1-9][0-9]{1,2})$