Когда вы запускаете команду в оболочке, оболочка создает подпроцесс (дочерний процесс). Все переменные среды, которые были определены или изменены в подпроцессе, будут потеряны для родительского процесса.
Однако, если вы source
скрипт, вы заставляете скрипт запускаться в текущем процессе. Это означает, что переменные окружения в скрипте, который вы запустили, не будут потеряны.