Se faccio [[ "0" =~ "^[0-9]+$" ]] && echo hello
a un terminale, mi aspetto di vedere la parola "ciao"Perché questa semplice regex di bash non restituisce true?
Tuttavia, non viene stampato nulla. Che cosa sto facendo di sbagliato?
Se faccio [[ "0" =~ "^[0-9]+$" ]] && echo hello
a un terminale, mi aspetto di vedere la parola "ciao"Perché questa semplice regex di bash non restituisce true?
Tuttavia, non viene stampato nulla. Che cosa sto facendo di sbagliato?
È necessario rimuovere le doppie virgolette presenti nella regex. vale a dire, non racchiudere il modello regex tra virgolette.
[[ "0" =~ ^[0-9]+$ ]]
Dovrebbe essere:
[[ "0" =~ ^[0-9]+$ ]] && echo hello
Nota che la seconda parte non è circondato con le doppie virgolette, altrimenti sarà trattato come il stringa di "^ [0-9] + $ "e non una regex. Per confermare che, provare:
[[ "^[0-9]+$" =~ "^[0-9]+$" ]] && echo hello
Leggero tecnicismo: il lato destro è ancora trattato come un'espressione regolare ('[[foo = ~" fo "]]' sarebbe comunque valido, ad esempio). La differenza è che tutti i * metacaratteri * all'interno della regex saranno trattati letteralmente. – chepner
@chepner corretto. Modificherà la mia risposta, grazie! – Maroun
'[[ "0"= ~^[0-9] + $]]' –
[Letture consigliate] (http://mywiki.wooledge.org/BashGuide/Patterns # Regular_Expressions-1) –