Bir değişkene boş bir dize atamanın ve hemen ona bir başka değişken dize atamanın faydası yoktur. Kabuk değişkenine bir değer ataması, önceki değerinin tamamen üzerine yazılır.
Bildiğim kadarıyla, değişkenleri açıkça boş dizelere başlatmanız gerektiğini söyleyen hiçbir öneri yoktur. Aslında, bunu yapmak bazı durumlarda hataları maskeleyebilir (altında çalıştırılırsa açıkça görülen hatalar set -u
, aşağıya bakın).
Komut dosyasının başlangıcından bu yana kullanılmayan veya unset
komutun çalıştırılmasıyla açıkça ayarlanan bir kümelenmemiş değişkenin değeri olmayacaktır. Böyle bir değişkenin değeri hiçbir şey olmayacaktır. Eğer olarak kullanılırsa "$myvariable"
, eşdeğerini elde edersiniz ""
ve asla "çöp verileri" elde edemezsiniz.
Kabuk seçeneği veya nounset
ile ayarlanırsa , ayarlanmamış bir değişkene başvurmak kabuğun hata üretmesine neden olur (ve etkileşimli olmayan bir kabuk sona erer):set -o nounset
set -u
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
veya bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
Değişkenin adı varolan bir ortam değişkenine karşılık geliyorsa, kabuk değişkenleri ortam tarafından başlatılır.
Ortam tarafından bu şekilde başlatılabilecek bir değişken (ve istenmeyen) kullanıyorsanız, komut dosyanızın ana bölümünden önce bunu açıkça kaldırabilirsiniz:
unset myvariable # unset so that it doesn't inherit a value from the environment
bu da onu bir ortam değişkeni olarak kaldıracaktır ya da yalnızca başlangıç değerini göz ardı edebilir ve bir atama ile üzerine yazabilirsiniz (bu da ortam değişkeninin değerini değiştirmesini sağlar).
Kabuk değişkeninde hiç başlatılmamış çöple karşılaşmazsınız (belirtildiği gibi, aynı adla bir ortam değişkeninde bu çöp zaten mevcut değilse).