Non vi è alcun vantaggio nell'assegnare una stringa vuota a una variabile e quindi nell'assegnare immediatamente un'altra stringa di variabile. Un'assegnazione di un valore a una variabile di shell sovrascriverà completamente il suo valore precedente.
Per quanto ne sappia, non esiste alcuna raccomandazione che affermi che è necessario inizializzare esplicitamente le variabili in stringhe vuote. In effetti, farlo potrebbe mascherare errori in alcune circostanze (errori che sarebbero altrimenti evidenti se in esecuzione sotto set -u
, vedi sotto).
Una variabile non impostata, non utilizzata dall'inizio di uno script o non esplicitamente eseguita eseguendo il unset
comando su di essa, non avrà alcun valore. Il valore di tale variabile non sarà nulla. Se usato come "$myvariable"
, otterrai l'equivalente di ""
e non otterrai mai "dati inutili".
Se l'opzione della shell nounset
è impostata con uno dei due set -o nounset
o set -u
, quindi facendo riferimento a una variabile non impostata, la shell produrrà un errore (e una shell non interattiva terminerebbe):
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
o, in bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
Le variabili di shell verranno inizializzate dall'ambiente se il nome della variabile corrisponde a una variabile di ambiente esistente.
Se ti aspetti di utilizzare una variabile che può essere inizializzata dall'ambiente in questo modo (e se è indesiderata), puoi disinserirla esplicitamente prima della parte principale dello script:
unset myvariable # unset so that it doesn't inherit a value from the environment
che lo rimuoverà anche come variabile d'ambiente, oppure potresti semplicemente ignorare il suo valore iniziale e sovrascriverlo semplicemente con un'assegnazione (che farebbe cambiare anche il valore della variabile d'ambiente).
Non vedresti mai immondizia non inizializzata in una variabile shell (a meno che, come indicato, quell'immondizia esistesse già in una variabile d'ambiente con lo stesso nome).