SORU
30 AĞUSTOS 2010, PAZARTESİ


Nasıl bir değişkeni bash ayarlanmış olup olmadığını kontrol etmek için?

Nasıl bir değişkeni bash sahiptir.

Eğer kullanıcı 1. verse nasıl kontrol örneğin, bir işlev için parametre?

function a {
    ?? if $1 is set
}

CEVAP
13 Aralık 2012, PERŞEMBE


Şu çözüm yanlıştır

if [ -z "$var" ]; then echo "var is unset"; else echo "var is set to '$var'"; fi

Bu ayarlama, bir değişken ve boş bir dizeye ayarlanmış olan bir değişken arasında ayrım yapmıyor. O,=", sonra yukarıdaki çözüm hatalı çıkış var ve Geri Al. demek var.

Ama bu ayrım gerekli durumlarda kullanıcı belirtmek için bir uzantısı veya ek özellikler listesinin ve bu da belirterek onları varsayılan için boş olmayan bir değer ise belirtme boş dize dilemeli komut dosyası kullan boş bir uzantısı veya listesi ek özellikler.

Doğru bir çözüm kullanmaktır

if [ -z ${var x} ]; then echo "var is unset"; else echo "var is set to '$var'"; fi

${var x} var Geri Al ise boş olarak değerlendirilir; parameter expansion bir dize ile değiştirir "x" başka yerde

daha sonra Nereye tırnak atlanan olabilir. (yani burada şunu söyleyebiliriz ki ${var x} yerine "${var x}") çünkü bu sözdizimi ve kullanımı garanti eder, bu sadece genişletmek için bir şeye ihtiyacım tırnak (beri de genişler x (içeren hiçbir kelime sonlarını çok ihtiyacı tırnak işaretleri yok) ya da hiçbir şey (hangi sonuçları [ z ] kolayca da değerlendirir aynı değeri (true) olarak [ -z "" ])), ancak aslında tırnak olabilir güvenli bir şekilde atlanmış burada değil hemen belli tüm (aslında değildi the first author of this quotes explanation kim da önemli bir Bash kodlayıcı), olur bazen daha iyi yazmak çözüm ile tırnak gibi [ -z "${var x}" ] en olası maliyet çok küçük O(1) hız cezası, ve/veya (ne ilk yazar mı:) kodunu kullanarak yanında bu çözüm, tırnak güvenle ihmal edilebilir neden için bir açıklama da açıklama içeren bu cevap için URL koydular.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • Lancome USA

    Lancome USA

    30 HAZİRAN 2009
  • WoodysGamertag

    WoodysGamert

    17 Aralık 2009