Perché la seguente espressione regolare stampa valid
, quando il nome è hdpworker01
?
name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid
Quello che provo a fare è stampare valid
solo se il nome corrisponde a worker[0-999]
.
Esempio di risultati attesi:
- Per
name=worker01
:valid
- Per
name=hdpworker01
:nessun output
Risposta accettata:
Per impostazione predefinita, un'espressione regolare non è ancorata all'inizio o alla fine di una stringa. Questo è diverso da es. modelli di globbing del nome file. Ciò significa che l'espressione può corrispondere in qualsiasi punto della stringa data.
Per avere la tua espressione ancorata all'inizio della stringa, usa
^worker[[:digit:]]
Per ancorarlo ulteriormente alla fine della stringa e per consentire da una a tre cifre, usa
^worker[[:digit:]]{1,3}$
Se vuoi abbinare worker10
ma non worker01
o worker003
(nessun numero pieno di zero), usa
^worker([0-9]|[1-9][0-9]{1,2})$