Errore regex condizione


14
string=123456

if [ $string == 123456 ]; then
echo 123
fi

Funziona bene, ma se cambio da == a = ~ ottengo questo errore:

./test: line 3: [: =~: binary operator expected

L'uso di =~in questo caso è sbagliato. =~confronta lo scalpiccio (lato sinistro del compito) con regexun'espressione regolare sul lato destro del giudizio. Un'espressione regolare nella sua forma più semplice viene trasmessa come'[0-9][0-9]'
Valentin Bajrami il

9
@ val0x00ff ma 123456è un RE valido
roaima il

@roaima ha concordato, tuttavia regex è noto per il suo motore, il riferimento a ritroso, il set di caratteri, i meta-caratteri che indicano l'inizio di una stringa, la fine di una stringa ecc.
Valentin Bajrami,

Risposte:


28

Lacorrispondenza regex di Bash funziona solo tra parentesi quadre doppie[[ ... ]]:

string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123

@Kusalananda: per quanto riguarda la modifica, le virgolette non sono richieste sul lato sinistro di un'espressione a doppia parentesi [[ ... ]], poiché non si verifica alcuna divisione di parole o espansione di percorso. Sono necessari solo quando si utilizzano parentesi singole [ ... ](entrambi i lati) e sulla destra dell'espressione parentesi doppia.
user000001

@ user000001 mentre hai ragione, è molto meglio solo citare tutte le variabili per riflesso a meno che non sia necessario non farlo. È un'abitudine molto più sicura.
Joe,

@Joe: D'accordo, in caso di dubbio, cita ... L'ho menzionato solo perché era una modifica a una risposta già corretta. Se fosse stato lì dalla prima revisione, non avrei commentato questo.
user000001,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.