Para ilustrar lo que dicen las otras respuestas:
$ foo="Hello, World"
$ echo $foo
Hello, World
$ bar="Goodbye"
$ export foo
$ bash
bash-3.2$ echo $foo
Hello, World
bash-3.2$ echo $bar
bash-3.2$
export
hace que la variable esté disponible para los subprocesos.
Es decir,
export name=value
significa que el nombre de la variable está disponible para cualquier proceso se ejecuta desde ese proceso de shell. Si desea que un proceso haga uso de esta variable, use export
y ejecute el proceso desde ese shell.
name=value
significa que el alcance de la variable está restringido al shell y no está disponible para ningún otro proceso. Usaría esto para (digamos) variables de bucle, variables temporales, etc.
Es importante tener en cuenta que exportar una variable no la pone a disposición de los procesos principales. Es decir, especificar y exportar una variable en un proceso generado no hace que esté disponible en el proceso que lo inició.