SORU
8 Aralık 2012, CUMARTESİ


Bash: Anlam &; [: çok fazla argüman" eğer hata [] (köşeli parantez)"

Ne buldum onu araştırma yaptıktan sonra post ediyorum herhangi bir basit kaynak anlamı yazım öğrenin ve aşağıdaki BASH kabuk hata için düzeltme yapamadım.

Hata:

-bash: [: too many arguments

Google dostu sürüm:bash open square bracket too many arguments.

İçerik:örneğin, eşittir, vb daha büyük gibi: basit bir karşılaştırma operatörü ile tek köşeli parantez içinde eğer bir durum

VARIABLE=$(/some/command);
if [ $VARIABLE == 0 ]; then
  # some action
fi 

CEVAP
8 Aralık 2012, CUMARTESİ


Eğer $VARIABLE Bir karakter dizisi içeren boşluk veya diğer özel karakterler and single square brackets are used (bir kısayol test komut), sonra Dize olabilir bölünmüş içine birden fazla kelime. Bunların her biri ayrı bir değişken olarak kabul edilir.

O kadarbir değişkeni birçok bağımsız böl.

Aynı bir dize boşluk veya diğer özel karakterler içeren atıyor, herhangi bir işlev çağrısı için de geçerli olacaktır.


Kolay düzeltme

Çift tırnak içinde değişken çıkış, bir dize (bu nedenle bir argüman olarak kalmaya zorlayarak sarın. Örneğin,

VARIABLE=$(/some/command);
if [ "$VARIABLE" == 0 ]; then
  # some action
fi 

Biralternatif düzeltmeçift köşeli parantez new test komutu için bir kısayol olan) kullanın.

Bu sadece bash (ve görünüşe göre) korn ve zsh içinde ancak var ve bu yüzden varsayılan kabukları /bin/sh vb adı ile uyumlu olmayabilir. Bu örneğin bazı sistemlerde, cron Her şey nasıl yapılandırıldığına bağlı olarak, konsolun değil ama işe yarayabilir anlamına gelir.

Bu gibi görünecektir:

VARIABLE=$(/some/command);
if [[ $VARIABLE == 0 ]]; then
  # some action
fi 

Ayrıca [: unary operator expected hata dikkat edin

Eğer bu hatayı görüyorsanız, muhtemelen öngörülemeyen çıkışı olan bir fonksiyonu bir string alıyoruz.Aynı zamanda boş bir dize elde etmek için(ya da tüm boşluk dize), bu yukarıda bile sıfır bağımsız olarak ele alınacağını "hızlı düzeltme" ile başarısız olur [: unary operator expected

Aynı 'yakaladım' eğer diğer diller için kullanılan eğer bir değişken içeriğini değerlendirilir önce etkili bu gibi kodun içine yazdırılacak beklemiyorsun.

İşte size bir örnek bu engeller hem [: too many arguments [: unary operator expected hata: değiştirme çıkışı ile varsayılan değeri ise boş (bu örnekte, 0), çift tırnak sarılmış her şey:

VARIABLE=$(/some/command);
if [ "${VARIABLE:-0}" == 0 ]; then
  # some action
fi 

(burada, eylem 0, ya da boş $DEĞİŞKEN olacak. Doğal olarak, eğer farklı bir davranış istiyordu ise farklı bir varsayılan değer 0 (varsayılan değer) değiştirmek) gerekir


Son bir not:[ test yukarıda da geçerlidir tüm hata test: too many arguments için bir kısayol (ve aynı zamanda test: unary operator expected)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Deany Boii

    Deany Boii

    27 Kasım 2007
  • SolidWorksTutoriels

    SolidWorksTu

    14 Kasım 2013
  • Titan Lee Hai

    Titan Lee Ha

    14 Temmuz 2008