Atribuição ( =
) nos scripts bash é também comparar o operador no bash.
Veja este exemplo:
if [ "$a" = "$b" ]
Observeos espaço em branco que enquadra o =
. Neste caso, estamos comparando "$a"
e "$b"
.
if [ "$a"="$b" ] is not equivalent to the above.
Teste com o exemplo:
kasiay@kasiyaPC~:$ a=2
kasiay@kasiyaPC~:$ b=3
Em seguida, executamos if [ "$a" = "$b" ]; then echo "equal"; else echo "not equal"; fi
, o resultado é " não igual " e é um resultado verdadeiro.
Mas se esfregamos if [ "$a"="$b" ]; then echo "equal"; else echo "not equal"; fi
, o resultado é " igual " e o resultado é errado !!
Por que neste caso estamos errados?
Quando estamos usando if [ "$a"="$b" ]
, ele é analisado como if [ A_TOKEN ]
, então, neste caso, a condição if sempre retorna um resultado verdadeiro. por exemplo:
if [ "$a"="$b" ]; then echo "TRUE"; fi
#result is TRUE
if [ 2=3 ]; then echo "TRUE"; fi
#result is TRUE
if [ anything ]; then echo "TRUE"; fi
#result is TRUE
Tanto =
como ==
são comparações de strings.
The ==
comparison operator behaves differently within a
double-brackets
test than within single brackets.
[[ $a == z* ]] # True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).
[ $a == z* ] # File globbing and word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).
links: Operadores de comparação
Onde você está usando uma declaração errada?
Em if ["$P1"=="$P2"];then
, deve ser if [ "$P1" == "$P2" ];then
. Espaços em torno de ==
e também depois e antes de colchetes.