Em:
a=$(cmd)
Esse é um comando simples sem parte de comando, então o status de saída é o da substituição do comando. Em:
a=$(cmd) export a
ou
export a="$(cmd)"
Há uma parte do comando aqui (mesmo se em alguns shells, export
está no meio do caminho entre um comando e uma palavra-chave), portanto, seu status de saída é retornado. Se cmd
falhar e não produzir saída export a=
ainda será executado e bem-sucedido, então export
retornará um status de saída 0.
Aqui você deseja:
a=$(cmd)
export a
Ou, melhor ainda, livre-se desse set -e
não confiável e faça o tratamento adequado de erros manualmente:
a=$(cmd) || exit
export a
Ver, por exemplo, BashFAQ 015: "Por que não define -e faz o que eu esperava?" para exemplos adicionais de por que e como set -e
pode produzir resultados inesperados.