В другом ответе правильно указано, что $()
создаст подоболочку, и у вас будет отдельная среда выполнения от родительской оболочки.
zzz=2
function f()
{
echo zzz=4
}
eval $(f)
echo $zzz
Вы можете решить эту проблему, используя eval
. Сначала выведите требуемый оператор присваивания внутри функции, а затем оцените этот оператор в коде вызывающего.
Примечание: обратите внимание, что у eval
есть некоторые предостережения, и их следует избегать, если вы точно не знаете, как работает ваш код.