Aceitunas escribiste:@explorer con '==' también funciona correctamente
Parece que funciona pero, no es así.
$4 contiene el comando, así que suponemos que es una cadena de caracteres.
El operador de comparación '==' es NUMÉRICO, por lo que va a hacer una conversión NUMÉRICA de los operandos, así que escribir esto:
if ($4 == "!crackit") {quiere decir que
$4 es convertido a número, y "!crackit" también es convertido a número.
Si $4 contiene alguna cadena de caracteres que no empieza por números, esa conversión da 0. Y de "!crackit", lo mismo.
Así que, entonces tenemos la operación '0 == 0', que siempre es verdadera. Por eso ves que funciona, pero no como pensabas.
Prueba: cambia en $var, la parte "!crackit", por cualquier otra (por ejemplo, "!craqueo"), y verás que también funciona el if(), cosa que no debería.
Por eso, la comparación de cadenas debe realizarse siempre con operadores alfanuméricos. Debes usar 'eq'.