Для доступа к переменным в b.sh
используйте source
вместо:
source b.sh var
Он должен дать то, что вы хотели.
Экспорт переменных в bash включает их в среду любых дочерних оболочек (подоболочек). Однако нет способа получить доступ к среде родительской оболочки.
Что касается вашей проблемы, я бы предложил написать $res
только для stdout в b.sh
и захватить вывод через подоболочку в a.sh
, т. е. result=$( b.sh )
. Этот подход приближается к структурированному программированию (вы называете фрагмент кода, который возвращает значение), чем использование общих переменных, и он более читабельен и менее подвержен ошибкам.