No es beneficioso asignar una cadena vacía a una variable y luego asignarle inmediatamente otra cadena variable. Una asignación de un valor a una variable de shell sobrescribirá por completo su valor anterior.
Que yo sepa, no hay ninguna recomendación que diga que debe inicializar explícitamente las variables en cadenas vacías. De hecho, hacerlo puede enmascarar errores en algunas circunstancias (errores que de otro modo serían evidentes si se ejecutan bajo set -u
, ver más abajo).
Una variable no establecida, que no se utiliza desde el inicio de un script o que se desarma explícitamente al ejecutar el unset
comando en ella, no tendrá valor. El valor de tal variable será nada. Si se usa como "$myvariable"
, obtendrá el equivalente de ""
, y nunca obtendrá "datos basura".
Si la opción de shell nounset
se establece con uno set -o nounset
o set -u
, entonces hacer referencia a una variable no establecida hará que el shell produzca un error (y un shell no interactivo terminaría):
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
o en bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
Las variables de shell serán inicializadas por el entorno si el nombre de la variable corresponde a una variable de entorno existente.
Si espera que esté utilizando una variable que puede ser inicializada por el entorno de esta manera (y si no es deseada), puede desarmarla explícitamente antes de la parte principal de su script:
unset myvariable # unset so that it doesn't inherit a value from the environment
lo que también lo eliminaría como una variable de entorno, o simplemente puede ignorar su valor inicial y simplemente sobrescribirlo con una asignación (lo que haría que la variable de entorno cambie también el valor).
Nunca encontraría basura no inicializada en una variable de shell (a menos que, como se indicó, esa basura ya existiera en una variable de entorno con el mismo nombre).