Lütfen dikkat: Bu sitede tek bir kabuk değişkenini sınama hakkında birçok soru var. Bu soru, tanımlanmamış herhangi bir değişken için bir komut dosyasını test etmektir.Tanımlı olmayan değişkenleri bash olarak nasıl hata yapabilirim?
Sen yürütme herhangi hatayı görmeden bash tanımlanmamış bir değişkeni kullanabilirsiniz:
#!/bin/bash
echo ${UNDEF_FILE}
ls -l ${UNDEF_FILE}
exit 0
Bu çok hata eğilimli buldum. Bir değişkenin adını büyük bir komut dosyasında değiştirmek veya bu değişkeni kaldırmak istersem, önceki tüm eski referanslar komut dosyasında hatalara neden olur. Bazen bu hata ayıklamak için açık değil veya ne zaman çok geç olduğunu öğrenir.
Bu neden izin verilir? Tanımlanmamış değişkenleri işaretlemenin bir yolu var mı?
"Neden" 1970'ler dönemi kabuklarıyla uyumluluğa geri dönüyor. Eğer tarihin aksine, en iyi uygulamaları önemsiyorsanız, statik kontrol - http://shellcheck.net/ ile olduğu gibi, aynı zamanda [tek başına bir araç olarak] indirilebilir [https://github.com/koalaman]/shellcheck) - arkadaşın burada. –
Açıkçası, tanımlanmamış değişkenlerin genişletilmesinin hatalı yapılması birçok yaygın deyimi bozar. '[[$ var]] & {echo" $ var ile bir şeyler yapmak "; } ', örneğin, set -u' ile kırılır: set -e'den farklı olarak (bu, yalnızca arızaları kontrol edemeyen veya koşulsuz olarak kullanılan hatalar yapar),' set -u' * her * referansı yapar tanımsız bir değişken bir hata. –
(Bu arada - tüm-büyük harf değişken isimleri, kabuk veya işletim sistemi anlamında çevre değişkenleri için POSIX tarafından tanımlanmış alanlardır, en az bir küçük harf içeren değişkenlerin ad alanı, uygulama kullanımı için ayrılmıştır. Yalnızca, ortam değişkenlerinin aksine, tüm kabuk değişkenlerine, sonrakinin üzerine bir ortam değişkeni içeren bir ad paylaşımı olan bir kabuk değişkeninin ayarlanması nedeniyle). –