Como os dois arquivos de script são bash scripts, você deve executá-los usando o intérprete bash shell, não o intérprete sh shell.
Você tem a% correta#! -line no script, portanto, executá-la diretamente da linha de comando ( ./main.sh ) deve fazer a coisa certa, contanto que o script seja executável.
Em sh scripts, as funções são definidas usando
somefuctionname () {
somefunctionbody
}
em vez de usar a palavra-chave function . Se você também usa . (ponto) no lugar de source , o script seria capaz de ser executado em sh , a menos que tenha usado outros recursos especiais de bash .