El problema es que en Bash cada comando tiene un solo código de salida. Cuando export foo="$(false)"el código de salida de falsesimplemente se descarta. Si en cambio lo haces
foo="$(false)"
export foo
se puede actuar sobre el primer comando que falla, por ejemplo, mediante la errexitconfiguración.
Declarar y asignar un literal de cadena como export foo='bar', por supuesto, no sufre este problema. Pero el cambio es la única constante en el desarrollo de software, y es simplemente un buen mantenimiento de las declaraciones a prueba de futuro dividiéndolos.
Además de los comandos específicos de la asignación que menciona, también hay varios comandos en una sola asignación, como foo="$(false)$(true)". Ver pipefailen man bashpara otro tal trampa.
Otra cosa para recordar es que la secuencia de declaración y asignación a veces es relevante. Por ejemplo, querrá declarar variables antes de asignarlas. (Desafortunadamente no es posible declarar variables antes de asignarlas por primera vez).local readonly