[
é um comando; [$#
não é. Você precisa separar um comando de seus argumentos:
if [ $# -eq 0 ]; then
echo "error" # Here, too
exit 1
fi
Por acaso, você pode substituir todo esse bloco por uma expansão de parâmetro especial:
: ${1?error}
Se o primeiro parâmetro posicional não estiver definido (ou seja, não há parâmetros posicionais), imprima a mensagem após o parâmetro? e sair.