2010-04-08 12 views

Antwort

71

Sie müssen == in numerischen Vergleichen in ((...)) verwenden:

"Vergleiche String?"
$ if [[ 3 == 3 ]]; then echo "yes"; fi 
yes 
$ if [[ 3 = 3 ]]; then echo "yes"; fi 
yes 
$ if [ 3 == 3 ]; then echo "yes"; fi 
yes 
$ if [ 3 = 3 ]; then echo "yes"; fi 
yes 
$ if test 3 == 3; then echo "yes"; fi 
yes 
$ if test 3 = 3; then echo "yes"; fi 
yes 

,:

$ if ((3 == 3)); then echo "yes"; fi 
yes 
$ if ((3 = 3)); then echo "yes"; fi 
bash: ((: 3 = 3 : attempted assignment to non-variable (error token is "= 3 ") 

Sie entweder für String-Vergleiche in [[ ... ]] oder [ ... ] oder test verwenden du sagst?

$ if [[ 10 < 2 ]]; then echo "yes"; fi # string comparison 
yes 
$ if ((10 < 2)); then echo "yes"; else echo "no"; fi # numeric comparison 
no 
$ if [[ 10 -lt 2 ]]; then echo "yes"; else echo "no"; fi # numeric comparison 
no 
+3

Sie sollten '' '' jedoch nicht mit '[' oder 'test' verwenden. '==' ist nicht Teil der POSIX-Spezifikation und wird nicht mit allen Shells funktionieren (insbesondere "Bindestrich" erkennt es nicht). – chepner

+3

@chepner: Das stimmt, aber die Frage bezieht sich speziell auf Bash. –

29

Es gibt einen feinen Unterschied in Bezug auf POSIX. Auszug aus dem Bash reference:

string1 == string2
Wahr, wenn die Strings gleich sind. = kann anstelle von == für die strikte Einhaltung von POSIX verwendet werden.

+0

Kein Unterschied in bash obwohl? Nur ein Problem mit der Portabilität? –

+0

@ T.E.D .: Nein, sehe meine Antwort. –

Verwandte Themen