if testa comandos.
if [ ... ] funciona porque [ é um comando ( /usr/bin/[ ou um construído (geralmente o último)) que espera ] como seu último argumento (apenas para fazer as coisas parecerem bonitas). Mas além disso, são necessários parâmetros, que precisam ser passados normalmente - como uma lista separada por espaços.
Se você não quiser usar [ , você pode fazer:
if test $i != 10; then e se comportará exatamente da mesma maneira.
Alternativamente, há [[ em bash , que é uma construção gramatical apropriada que cria um contexto separado, que permite usar coisas como > ou && nele com semântica diferente do que eles significariam em uma chamada de comando usual ( [ e test são apenas invocações de comando), mas você ainda precisa de espaços em torno de [[ e ]] .