Linux Bash'te çift ve işareti (&&) ve noktalı virgül (;) arasındaki fark nedir?


112

Linux içinde işareti ve noktalı virgül arasındaki fark nedir Bash ?

Örneğin,

$ command1 && command2

vs

$ command1; command2

6
Bunu burada yanıtladım: superuser.com/a/619019/107862
Etan Reisner

9
Konu dışı konuya gelince, en son kontrol ettiğimde, bash hala bir programlama diliydi, ama daha önce yanılmışım ve biraz kurutulmuş meyve şekeri olabilir.
Steve K

Öyle ve belirli bir davranış veya belirli bir şeyi yapmanın doğru yolu hakkında bir soru soruyor olsaydınız, konu kesinlikle olurdu. Bu, benim ilgilendiğim kadarıyla açıkça bir "programlama" sorusu olmayan "bir dilin sözdizimi hakkında soru" olarak daha gri bir kategoriye giriyor.
Etan Reisner

4
bash bazı yönlerden kuru ve bazı yönlerden tatlıdır. Günün sonunda oldukça keyifli ve sindirilebilir. Ancak bebeklerden kolayca çalınamaz.
code_monk

Yanıtlar:


139

&&Operatör bir boolean VE operatörüdür: sol tarafı sıfırdan farklı bir çıkış durumu, operatör döner statü olduğunu döner ve sağ tarafını (kısa devre) değerlendirmek etmezse, aksi takdirde sağ tarafını değerlendirir ve çıkış durumu ile döner . Bu, genellikle command2yalnızca command1başarıyla çalıştırıldığında çalıştırıldığından emin olmak için kullanılır .

;Ne olursa olsun birinci başarılı olur olsun veya olmasın ikinci komutu çalıştırmak böylece kodu yalnızca, komutları ayırır.


6
çift &&ve işareti &, bash'daki tek bir ve işaretinden farklı mıdır?
Charlie Parker

16
@CharlieParker &komutun arka planda çalıştırılmasına neden olur, yani evet. "Bunu arka planda çalıştır", "bu sonraki komutu yalnızca diğerinin başarılı olması durumunda çalıştır" ifadesinden çok farklıdır.
cdhowie

Command2 sadece çalışacak command1 döndü sıfır başarıyla .. bitmiş anlamına çıkış durumu
Nik

Does ;İlk komut bitirmek için hala beklemek?
rfii

@rfii Evet, ancak ilk komutun başarılı olup olmadığına bakılmaksızın ikinci komutu yürütür. a;b"koş ave sonra koş " anlamına gelir b. a&&b"koş ave sonra byalnızca abaşarılı olursa çalıştır " anlamına gelir .
cdhowie

33

command1 && command2

command1 && command2yürütür command2(ve sadece) halinde command1uygulama başarılı bir şekilde sona erer. Unix jargonunda bu, çıkış kodu / dönüş kodu sıfıra eşittir.

command1; command2

command1; command2sırayla çalıştırdıktan command2sonra yürütülür command1. Komutların başarılı olup olmadığı önemli değildir.


6

İlki, ANDkısa devre değerlendirmesini kullanan basit bir mantıktır , ikincisi basitçe iki komutu sınırlar.

Gerçekte olan şey, ilk program sıfırdan farklı bir çıkış kodu döndürdüğünde, bütün ANDolarak değerlendirilir FALSEve ikinci komut çalıştırılmaz. Daha sonra her ikisini de sırayla çalıştırır.

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.