Esse código está errado, ele não funciona se o argumento não estiver vazio (e não começar com espaço em branco) porque [ não é um caractere especial e não é reconhecido como comando se não for uma palavra separada (que nem sequer funcionaria com [[ ).
set -x mostra o que a shell vê:
set -x
[$1 = ]
+ '[' = ']'
Nesse caso, o resultado do teste é verdadeiro porque existe uma string entre [ e ] ; não importa que seja = .
Os testes para um argumento não vazio devem ser feitos como
[ -n "$1" ] ; echo $?
+ '[' -n '' ']'
+ echo 1
ou
[ -z "$1" ] ; echo $?
+ '[' -z '' ']'
+ echo 0
em vez