Работают ли функции bash в текущей оболочке или подоболочке?

У меня есть открытый терминал, и я вызываю функцию bash:

change_path 

где:

 change_path(){ export PATH="foobar:$PATH"; } 

Будет ли change_path всегда работать в текущей оболочке и всегда будет изменять $ PATH текущей оболочки? Пока что в моем тестировании это, кажется, имеет место, но трудно сказать наверняка.

Да, вызываемая вами функция выполняется в текущей оболочке.
Это при условии, что функция была импортирована (определена) в текущей оболочке. Это можно было сделать, используя какой-то файл (например, ~ / .bashrc) или вручную написав функцию в текущей оболочке. Вы можете подтвердить это предположение, выполнив:

 $ type -a change_path 

Если это печатает определение функции, функция была определена в настоящей оболочке и, имея доступ к текущим переменным оболочки, может изменить любую из них.

Это не означает, что функция всегда будет изменять переменные, если функция правильно ограничена, например, используя (...) вместо {...} :

 $ change_path()( export PATH="foobar:$PATH"; ) 

Но эта функция на самом деле все еще работает в текущей оболочке, просто она запускает вложенную оболочку (...)

Чтобы подтвердить, прочитайте это из руководства bash (выделено мной):

ФУНКЦИИ
Функция оболочки, определенная, как описано выше в разделе ГРАММА ШЕЛЛА, хранит серию команд для последующего выполнения. Когда имя функции оболочки используется в качестве простого имени команды, выполняется список команд, связанных с этим именем функции. Функции выполняются в контексте текущей оболочки ; не создается новый процесс для их интерпретации (в отличие от выполнения сценария оболочки).