Mais ou menos certo, mas totalmente errado.
a=0
if [ $a = "0" ]; then echo 'oi'; fi;
if [ "$a" = "0" ]; then echo 'oi'; fi;
Ambos vão funcionar, mas tem que ficar atento, porque o "=" serve somente pra comparações de strings. Para comparações aritméticas, o equivalente é o "-eq" ("[" é o comando test, "$(which [) --help" ).
Agora o ultimo realmente não vai funcionar nunca, isso porque "[" , assim como o "echo" e outros, historicamente são programas que hoje em dia estão embutidos na maioria do shells ("type ["). Então existe o programa "[", que aceita alguns argumentos, e espera como o ultimo deles um "]". Isso cria limitações, "[qualquer_coisa" não vai ser encontrado no $PATH (porque o nome do programa é só "["), e sem um espaço entre qualquer_coisa e "]", o ultimo argumento não vai ser "]" e sim "qualquer_coisa]". Quando embutiram esse programa nos shells, essas limitações foram mantidas "artificialmente", pra ter compatibilidade com o programa original.