[ $x!=57 && $x!=59 && $x!=29 && $x!=53 ]
[
é um comando, obedece às mesmas regras, digamos, ls
. &&
é uma maneira de agrupar comandos condicionalmente. Em [ foo && bar ]
, o shell executa o comando [ foo
e, se for bem-sucedido, será executado bar ]
. O comando [
falha porque espera ver um ]
como seu último argumento e, portanto, o segundo comando não é executado.
A sintaxe condicional especial [[ .. ]]
, no entanto, suporta &&
dentro dela, portanto, você pode usar [[ $x != 57 && $x != 59 && ... ]]
. Observe que ainda requer espaços em branco em torno dos operadores. Plain $x!=57
seria um teste para ver se $x!=57
é uma string não vazia, o que sempre é, independentemente do valor de x
.
Ou coloque o ]
de fechamento antes do &&
: [ "$x" != 57 ] && [ "$x" != 59 ] && ...