Qual é a diferença entre o operador “=” e “==” no Bash?

Parece que esses dois operadores são praticamente os mesmos – há alguma diferença? Quando devo usar = e quando == ?

Você deve usar == em comparações numéricas em (( ... )) :

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

Você pode usar para comparações de strings em [[ ... ]] ou [ ... ] ou 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 

“Comparações de cordas?”, Você diz?

 $ 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 

Há uma diferença sutil em relação ao POSIX. Trecho da referência Bash :

string1 == string2
Verdadeiro se as cordas são iguais. = pode ser usado no lugar de == para conformidade estrita com POSIX.