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