Qual è la differenza tra operatore “=” e “==” in Bash?

Sembra che questi due operatori siano praticamente uguali: c’è una differenza? Quando dovrei usare = e quando == ?

Devi usare == in confronti numerici in (( ... )) :

 $ 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 ") 

Puoi utilizzare sia per il confronto di stringhe in [[ ... ]] o [ ... ] che per il 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 

“Confronto tra stringhe?”, Dici?

 $ 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 

C’è una sottile differenza rispetto a POSIX. Estratto dal riferimento Bash :

string1 == string2
Vero se le stringhe sono uguali. = può essere usato al posto di == per la stretta conformità POSIX.