Przypisanie pustego łańcucha do zmiennej nie przynosi korzyści, a następnie natychmiastowe przypisanie do niego innego łańcucha zmiennej. Przypisanie wartości do zmiennej powłoki całkowicie zastąpi poprzednią wartość.
Według mojej wiedzy nie ma żadnego zalecenia, które mówi, że powinieneś jawnie inicjować zmienne do pustych łańcuchów. W rzeczywistości może to w niektórych okolicznościach maskować błędy (błędy, które w innym przypadku byłyby widoczne, gdyby działały pod set -u
, patrz poniżej).
Nieuzbrojona zmienna, nieużywana od początku skryptu lub jawnie rozbrojona przez uruchomienie na niej unset
polecenia, nie będzie miała wartości. Wartość takiej zmiennej będzie niczym. Jeśli "$myvariable"
użyjesz jako , otrzymasz ekwiwalent ""
i nigdy nie dostaniesz „śmieciowych danych”.
Jeśli opcja powłoki nounset
jest ustawiona za pomocą albo, set -o nounset
albo set -u
odwołanie się do zmiennej nieustawionej spowoduje, że powłoka wygeneruje błąd (i powłoka nieinteraktywna zakończy działanie):
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
lub w bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
Zmienne powłoki zostaną zainicjowane przez środowisko, jeśli nazwa zmiennej odpowiada istniejącej zmiennej środowiskowej.
Jeśli spodziewasz się, że używasz zmiennej, która może być zainicjowana przez środowisko w ten sposób (i jeśli jest niepożądana), możesz jawnie ją rozbroić przed główną częścią skryptu:
unset myvariable # unset so that it doesn't inherit a value from the environment
który również usunąłby ją jako zmienną środowiskową, lub możesz po prostu zignorować jej wartość początkową i po prostu nadpisać ją przypisaniem (co spowodowałoby również zmianę wartości zmiennej środowiskowej).
Nigdy nie natrafisz na niezainicjowane śmieci w zmiennej powłoki (chyba że, jak wspomniano, śmieci już istniały w zmiennej środowiskowej o tej samej nazwie).