result=add $num1 $num2
Esta linha é interpretada pelo shell como uma atribuição (result = add), comando ($ num1) e argumento ($ num2). Não é isso que você queria. Para recuperar a saída de uma função, você precisa de substituição de comando:
result=$(add $num1 $num2)