Este é um problema de escopo variável e não tem absolutamente nada a ver com a execução manual de um script a partir da linha de comando ou a execução de outro script.
As variáveis do shell que não são exportadas para o ambiente não são visíveis para processos filhos (incluindo shells filho)
Se você estiver obtendo script2 dentro de script3 , então script3 verá todas as variáveis definidas em script2 , porque tudo acontece dentro do escopo de script3 . É praticamente o mesmo se você contratar script2 e script3 dentro de script1 (mas, nesse caso, tudo acontece dentro do escopo de script1 )
Se, no entanto, você estiver pesquisando script2 dentro de script1 e, em seguida, executando ( não sourcing) script3 de script1 , então script3 verá apenas variáveis definidas ou alterado em script2 se eles forem exportados.
Realmente não importa quando ou onde as variáveis são exportadas, desde que aconteça antes de script3 ser executado. As variáveis podem ser exportadas em script1 ou em script2 , ou até mesmo no shell pai (ou em seu .profile / .bashrc / etc) que executou script1 para começar.