Por que não exportar variáveis na mesma linha que você atribui a elas?

41

De Qual é o último argumento de o comando anterior?

shellcheck tells you not to export variables on the same line you assign them.

Eu estava me perguntando por quê?

O mesmo conselho se aplica a alias , declare , export , local , readonly e typeset ?

    
por Tim 17.04.2018 / 05:45

1 resposta

50

O problema é que no Bash todo comando tem apenas um código de saída. Quando você export foo="$(false)" o código de saída de false é simplesmente descartado. Se você, ao invés disso, fizer

foo="$(false)"
export foo

o primeiro comando com falha pode ser usado, por exemplo, pela configuração errexit .

Declarar e atribuir um literal de string, como export foo='bar' , obviamente não sofre desse problema. Mas a mudança é a única constante no desenvolvimento de software, e é simplesmente uma boa administração para que essas declarações sejam preparadas para o futuro, dividindo-as.

Além dos comandos específicos da atribuição que você menciona, há também vários comandos em uma única atribuição, como foo="$(false)$(true)" . Consulte pipefail em man bash para mais uma armadilha desse tipo.

Outra coisa a lembrar é que a sequência de declaração e atribuição é por vezes relevante. Por exemplo, você desejará declarar variáveis local antes atribuindo-os. (Infelizmente não é possível declarar variáveis readonly antes de atribuí-los pela primeira vez.)

    
por 17.04.2018 / 06:06

Tags