Leí aquí que el propósito de exportun shell es hacer que la variable esté disponible para los subprocesos iniciados desde el shell.
Sin embargo, también he leído aquí y aquí que "los procesos heredan su entorno de sus padres (el proceso que los inició)".
Si este es el caso, ¿por qué necesitamos export? ¿Qué me estoy perdiendo?
¿Las variables de shell no son parte del entorno por defecto? ¿Cuál es la diferencia?
fuente

set -kes para que se pueda usarcmd ENVVAR=valueen lugar deENVVAR=value cmd, eso no funcionará en su ejemplo a menos queset -kse haya ejecutado antes de invocarf. Además, no hay muchos shells que lo admitan hoy en día y solo por compatibilidad con el shell Bourne. En el shell Bourne (o Korn), eso no funcionaría para las funciones. Y debido a que afecta el análisis del shell, tiene que estar vigente en el momento en que el shell lee el código que lo utiliza allí.set -aHay una diferencia entre las variables de shell y las variables de entorno. Si define una variable de shell sin
exportutilizarla, no se agrega al entorno de procesos y, por lo tanto, no se hereda a sus elementos secundarios.Usando
exportle dice al shell que agregue la variable del shell al entorno. Puede probar esto usandoprintenv(que solo imprime su entornostdout, ya que es un proceso secundario donde ve el efecto deexportlas variables):fuente
Una variable, una vez exportada, es parte del entorno.
PATHse exporta en el propio shell, mientras que las variables personalizadas se pueden exportar según sea necesario. Usando un código de configuración:Comparar
Con
Como
fooel shelltest2.shno lo exporta y nunca lo exportó, no fue parte del entorno desubshell.shla última ejecución.fuente