O problema é que, no Bash, todos os comandos têm apenas um código de saída. Quando você export foo="$(false)"o código de saída falseé simplesmente descartado. Se você preferir
foo="$(false)"
export foo
o primeiro comando com falha pode ser acionado, por exemplo, pela errexitconfiguração.
Declarar e atribuir uma string literal, como export foo='bar'é claro, não sofre com esse problema. Mas a mudança é a única constante no desenvolvimento de software, e é simplesmente uma boa tarefa de arrumar essas declarações à prova de futuro, dividindo-as.
Além dos comandos específicos de atribuição mencionados, também existem vários comandos em uma única atribuição, como foo="$(false)$(true)". Veja pipefailem man bashpara mais uma tal armadilha.
Outra coisa a lembrar é que a sequência de declaração e atribuição às vezes é relevante. Por exemplo, você desejará declarar variáveis antes de atribuí-las. (Infelizmente, não é possível declarar variáveis antes de atribuí-las pela primeira vez.)local readonly