Нет смысла присваивать переменную пустую строку, а затем немедленно назначать ей другую переменную строку. Присвоение значения переменной оболочки полностью перезапишет его предыдущее значение.
Насколько мне известно, нет рекомендаций, согласно которым вы должны явно инициализировать переменные для пустых строк. Фактически, это может маскировать ошибки при некоторых обстоятельствах (ошибки, которые в противном случае были бы очевидны при работе set -u
, см. Ниже).
Неустановленная переменная, которая не используется с момента запуска скрипта или явно сбрасывается при запуске unset
команды, не будет иметь значения. Значение такой переменной будет ничем. Если использовать как "$myvariable"
, вы получите эквивалент ""
, и вы никогда не получите «мусорные данные».
Если параметр оболочки nounset
установлен с помощью либо, set -o nounset
либо set -u
, то ссылка на неустановленную переменную вызовет ошибку оболочки (и неинтерактивная оболочка прекратит работу):
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
или в bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
Переменные оболочки будут инициализированы средой, если имя переменной соответствует существующей переменной среды.
Если вы ожидаете, что используете переменную, которая может быть инициализирована средой таким образом (и если она нежелательна), то вы можете явно сбросить ее перед основной частью вашего скрипта:
unset myvariable # unset so that it doesn't inherit a value from the environment
который также удалит его как переменную среды, или вы можете просто проигнорировать его начальное значение и просто перезаписать его присваиванием (что также приведет к изменению значения переменной среды).
Вы никогда не встретите неинициализированный мусор в переменной оболочки (если, как указано, мусор уже существует в переменной окружения с тем же именем).