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 false
simplemente se descarta. Si en cambio lo haces
foo="$(false)"
export foo
se puede actuar sobre el primer comando que falla, por ejemplo, mediante la errexit
configuració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 pipefail
en man bash
para 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