mragucci hat geschrieben:Verwende einen Vergleichsoperator, keinen Zuweisungsoperator
obwohl der Thread als gelöst markiert wurde, muß ich das berichtigen. Hier wurde kein "Zuweisungsoperator" benutzt, sondern ein ganz normaler Stringvergleich nach dem POSIX Standard:
man bash hat geschrieben:
string1 == string2
True if the strings are equal. = may be used in place of == for
strict POSIX compliance.
Zu dem oben genannten Fehler kommt es wenn die Variable leer ist, sobald die Variable einen Inhalt bekommt funktioniert diese Schreibweise auch:
Code: Alles auswählen
gms2 ~ # QUERY_STRING=""; if [ $QUERY_STRING = "test" ]; then echo true; else echo false; fi
bash: [: =: unary operator expected
false
gms2 ~ # QUERY_STRING="test"; if [ $QUERY_STRING = "test" ]; then echo true; else echo false; fi
true
gms2 ~ # QUERY_STRING="bla"; if [ $QUERY_STRING = "test" ]; then echo true; else echo false; fi
false
will man obigen Fehler vermeiden, kann man die Variable entweder quoten, oder den "conditional command" ( [[ expression ]] ) verwenden:
Code: Alles auswählen
gms2 ~ # QUERY_STRING=""; if [ "$QUERY_STRING" = "test" ]; then echo true; else echo false; fi
false
gms2 ~ # QUERY_STRING=""; if [[ $QUERY_STRING = "test" ]]; then echo true; else echo false; fi
false
Über den "conditional command" funktioniert dann z.B auch das "Pattern Matching"
Code: Alles auswählen
gms2 ~ # QUERY_STRING="test"; if [[ $QUERY_STRING == t* ]]; then echo true; else echo false; fi
true
gms2 ~ # QUERY_STRING="test"; if [[ $QUERY_STRING = t* ]]; then echo true; else echo false; fi
true
Gruß
gms