Não há benefício em atribuir uma sequência vazia a uma variável e, em seguida, atribuir imediatamente outra sequência variável a ela. Uma atribuição de um valor a uma variável do shell substituirá completamente seu valor anterior.
No meu conhecimento, nenhuma recomendação diz que você deve inicializar explicitamente variáveis para cadeias vazias. De fato, fazer isso pode mascarar erros em algumas circunstâncias (erros que de outra forma seriam aparentes se executados em baixo set -u
, veja abaixo).
Uma variável não configurada, que não está sendo usada desde o início de um script ou que não foi definida explicitamente executando o unset
comando nele, não terá valor. O valor dessa variável não será nada. Se usado como "$myvariable"
, você obterá o equivalente a ""
e nunca obterá "dados de lixo".
Se a opção shell nounset
estiver configurada com um set -o nounset
ou set -u
, a referência a uma variável não configurada fará com que o shell produza um erro (e um shell não interativo seria encerrado):
$ 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 esteja usando uma variável que pode ser inicializada pelo ambiente dessa maneira (e se for indesejada), poderá desabilitá-la explicitamente antes da parte principal do seu script:
unset myvariable # unset so that it doesn't inherit a value from the environment
o que também a removeria como uma variável de ambiente ou, você pode simplesmente ignorar seu valor inicial e substituí-lo por uma atribuição (o que faria com que a variável de ambiente também alterasse o valor).
Você nunca encontraria lixo não inicializado em uma variável de shell (a menos que, como indicado, esse lixo já existisse em uma variável de ambiente com o mesmo nome).