Wygląda na to, że ci dwaj operatorzy są prawie tacy sami - czy istnieje różnica? Kiedy należy użyć =
i kiedy ==
?Jaka jest różnica między operatorem "=" i "==" w Bash?
Odpowiedz
Musisz użyć ==
porównań numerycznych w ((...))
:
$ 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 ")
można używać zarówno do porównań łańcuchowych w [[ ... ]]
lub [ ... ]
lub test
:
$ 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
"porównań ciąg?" mówisz?
$ 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
Istnieje subtelna różnica w odniesieniu do POSIX. Wyciąg z Bash reference:
string1 == string2
Prawda, jeśli słowa są równe.=
może być używany zamiast==
, aby zachować zgodność z wymaganiami POSIX.
Nie ma różnicy w bashach? Tylko kwestia przenośności? –
@ T.E.D .: Nie, zobacz moją odpowiedź. –
Nie powinieneś używać '==' z '[' lub 'test', chociaż. '==' nie jest częścią specyfikacji POSIX i nie będzie działać ze wszystkimi powłokami (w szczególności 'dash' nie rozpoznaje go). – chepner
@chepner: To prawda, ale pytanie dotyczy właśnie Bash. –