Немає користі, якщо призначити порожній рядок змінній, а потім негайно призначити їй інший рядок змінної. Присвоєння значення змінній оболонки повністю замінить її попереднє значення.
Наскільки мені відомо, жодна рекомендація не говорить про те, що слід явно ініціалізувати змінні в порожні рядки. Фактично, це може замаскувати помилки за певних обставин (помилки, які в іншому випадку були б очевидні при запуску 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
який також видалить його як змінну середовища, або, ви можете просто проігнорувати його початкове значення та просто перезаписати його з призначенням (що також призведе до зміни значення змінної середовища).
Ви ніколи не зіткнетеся з неініціалізованим сміттям у змінній оболонки (якщо, як зазначалося, цей сміття вже існував у змінній середовища з однойменною назвою).