Я прочитал здесь, что цель export
оболочки - сделать переменную доступной для подпроцессов, запускаемых из оболочки.
Однако я также читал здесь и здесь, что «Процессы наследуют свое окружение от своего родителя (процесс, который их запустил)».
Если это так, зачем нам это нужно export
? Чего мне не хватает?
Переменные оболочки не являются частью среды по умолчанию? В чем разница?
set -k
Это так, что можно использоватьcmd ENVVAR=value
вместоENVVAR=value cmd
, это не будет работать в вашем примере, если неset -k
было выполнено до вызоваf
. Кроме того, не многие оболочки поддерживают его в настоящее время и только для обратной совместимости с оболочкой Bourne. В оболочке Bourne (или Korn) это не сработало бы для функций. И поскольку он влияет на синтаксический анализ оболочки, он должен действовать, когда оболочка читает код, который использует его там.