Bunun yerine && kullanmanın nedeni nedir; Aynı satıra komutları yerleştirmek için?


30

Her iki Linux'ta da uzman olmamak Unix'ten değil, aynı satırdaki 2 komut dizisinden oluşan bu 2 yöntem arasındaki farkın ne olduğunu merak ediyorum. Bu basit örnekte çıktıda bir fark görmüyorum

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Bu herhangi bir soruna neden olmadı - Sadece merak ediyorum ..

Yanıtlar:


43

&&mantıklı bir 've'. İlk argüman değerlendirilir ve ikincisi sadece birincisi doğru döndüğünde değerlendirilir. Bunun nedeni, "yanlış VE bir şey" in her zaman yanlıştır, bu nedenle bu durumda ikinci argümanı değerlendirmeye gerek yoktur.

Bu nedenle &&, birincisi bir hata bildirdiğinde ikinci komutun çalıştırılmadığından emin olun ( trueçıkış kodu 0ile gösterilir, bu hata olmadığını gösterir). Buna karşılık, ;ilkinin sonucu ne olursa olsun, her iki komutu da yerine getirir.

Sonuç: Zincirleme komutları ile &&iyi bir alışkanlıktır. Bunun tersine, bir ;şeyler ters gittiğinde sonraki komutları yerine getirmez.


Ne demek istiyorsun 0araçları trueya da 0bir hata IS - araçlarını doğru mu?
Michael Butler

1
@MichaelButler: 0anlamına gelir true. Bir açıklama ekledim.
azimut

26

;

Önceki çıkış durumu ne olursa olsun, sırayla komutları yerine getirir:

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

Mantıksal VE

Bir sonraki komutu uygulayın, ancak yalnızca önceki komut başarılı olursa (çıkış durumu şuydu 0):

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

Mantıksal VEYA

Bir sonraki komutu uygulayın, ancak yalnızca önceki komut başarısız olursa (çıkış durumu değildi 0 ):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command

6
Ayrıca, sh -c "exit 0"değiştirilebilir truebu örneklerde ve sh -c "exit 1"birlikte false.
Flimm
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.