2015-05-21 11 views
5

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?

+1

'[[ "0"= ~^[0-9] + $]]' –

+0

[Letture consigliate] (http://mywiki.wooledge.org/BashGuide/Patterns # Regular_Expressions-1) –

risposta

5

È necessario rimuovere le doppie virgolette presenti nella regex. vale a dire, non racchiudere il modello regex tra virgolette.

[[ "0" =~ ^[0-9]+$ ]] 
3

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 
+2

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

+0

@chepner corretto. Modificherà la mia risposta, grazie! – Maroun

Problemi correlati