Não há nenhum benefício em atribuir uma cadeia vazia a uma variável e, em seguida, atribuir imediatamente outra cadeia variável a ela. Uma atribuição de um valor a uma variável de shell sobrescreverá completamente seu valor anterior.
Não tenho conhecimento de nenhuma recomendação que diga que você deve inicializar explicitamente as variáveis para sequências vazias. Na verdade, isso pode mascarar erros em algumas circunstâncias (erros que, de outra forma, seriam aparentes se executados em set -u
, veja abaixo).
Uma variável não definida, não usada desde o início de um script ou explicitamente não definida, executando o comando unset
, não terá valor. O valor de tal variável será nada. Se usado como "$myvariable"
, você receberá o equivalente a ""
.
Se a opção nounset
do shell for definida com set -o nounset
ou set -u
, a referência a uma variável não definida fará com que o shell produza um erro (e um shell não interativo terminaria):
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
ou, em bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
As variáveis do shell serão inicializadas pelo ambiente se o nome da variável corresponder a uma variável de ambiente existente.
Se você espera que você esteja usando uma variável que pode ser inicializada pelo ambiente dessa forma (e se ela não for desejada), você pode desmarcá-la explicitamente antes da parte principal do seu script:
unset myvariable # unset so that it doesn't inherit a value from the environment
que também o removeria como uma variável de ambiente, ou você pode simplesmente ignorar seu valor inicial e apenas sobrescrevê-lo com uma atribuição (o que também tornaria o valor de mudança da variável de ambiente).
Você nunca encontrará lixo não inicializado em uma variável de shell (a menos que, como dito, o lixo já exista em uma variável de ambiente com o mesmo nome).