Koşullu yapılarda noktalı virgül


34

Neden noktalı virgülleri bir birine koyup diğerine koymuyorsun?

Sonuç aynı

Birinci kod

if [ "a" == "a" ]
then
 echo "true"
fi

Kod iki

if [ "a" == "a" ];
then
 echo "true";
fi

İkinci koddaki noktalı virgül gereksiz mi?

Noktalı virgül yerleştirmek ne zaman gereklidir?


2
Bu, yeterince ve doğru bir şekilde cevaplandı, ancak OP'nin de şunu bildirmesini istedim; sadece herhangi bir satır sonu değiştirir , böylece iki komutu bir satırda birleştirebilirsiniz, örneğin:svn up; make
Aaron D. Marasco

1
Ayrıca, ;;durum ifadelerinde eşleşmeleri ayırmak için iki noktalı virgül kullanıldığını unutmayın. ;;burada isteğe bağlıdır, isteğe bağlı ;;değildir, ancak aynı şey değildir, ;ya ; ;da sadece biraz benziyor. Tek noktalı virgül ;, bir vaka ifadesinin COMMANDS bölümlerinde normal şekilde çalışır.
cas

Yanıtlar:


30

Noktalı virgül yalnızca satırın sonu eksik olduğunda gerekir:

if [ "a" == "a" ] ; then echo "true" ; fi

Noktalı virgül olmadan, sözdizimi hatası alıyorsunuz.

Alıntılar hakkındaki sorunuzu anlamıyorum. Daha spesifik olabilir misin?

(Bu arada, =bunun yerine kullanmak ==daha taşınabilir ve POSIX uyumludur).


İkinci koddaki alıntılar gereksiz mi?
Jhonathan,

2
Her iki örnekteki tüm tırnaklar gereksizdir.
choroba

6

Noktalı virgül sıklıkla kullanılır, çünkü bazıları millet (/ me eg) böyle bir stile benzer:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

Bu durumda, o zaman-anahtar kelimesi koşul satırına yerleştirilmişse, zorunludur, çünkü yeni bir komut, choroba tarafından yazıldığı gibi başlar.

Koşul kontrolündeki tırnaklarla ilgili olarak, değişkene hiçbir şey atanmamışsa istisna oluşmamasını sağlamak için genellikle değişkenlerle birlikte kullanılırlar. Bu daha güvenli bir stil ve gereksiz görünüyor, ancak kabuk programlamada bile zaman zaman programlar işleniyor, ancak içerik değişkenlere atanamadı. Sonra komut hala çalışıyor çünkü boş bir dize karşılaştırılıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.