Michael Mrozek cobre a maioria dos problemas e suas correções funcionarão desde que você está usando o Bash.
Você pode estar interessado no fato de que a capacidade de criar um script com argumentos é um bashismo. Em sh ou dash , seu main.sh não ecoará nada porque os argumentos para o script de origem são ignorados e $1 se referirá ao argumento para main.sh.
Quando você fonte o script em sh , é como se você acabou de copiar e colou o texto do script de origem para o arquivo do qual foi originado. Considere o seguinte (note que fiz a correção que Michael recomendou):
$ bash ./test.sh
A String
$ sh ./test.sh
$ sh ./test.sh "HELLO WORLD"
HELLO WORLD