&&
Operatör kullan
cmd1 && cmd2 && cmd3
Kabuk komut dosyasında &&
ve ||
operatörler, C'deki mantıksal operatörlerin optimize edilmiş uygulamasından sonra modellenir &&
ve AND ||
anlamına gelir ve VEYA anlamına gelir. Unix, C ile sıkı sıkıya ilişkilidir ve C'de, sonuç ilk işlenenden zaten biliniyorsa, ikinci mantıksal işleç işleci değerlendirilmez. Örneğin "false && x"
, herkes false
için x
, bu yüzden değerlendirmeye gerek yok x
(özellikle x
bir işlev çağrısı ise); benzer şekilde "true || x"
. Buna aynı zamanda kısa devre anlambilimi denir .
Unix'te, komutların dönüş değerlerini "başarılı tamamlama" gerçeği değerleri olarak yorumlamak gelenekseldir: çıkış kodu 0 anlamına gelir true
(başarı), sıfır olmayan araçlar false
(başarısızlık). Bu nedenle, cmd1 && cmd2
döndürülen ilk komut "false"
(başarısızlığı gösteren sıfır olmayan çıkış durumu), bileşik komutun durumu bilinir: başarısızlık. Bu nedenle, genel yorumu şöyle cmd1 && cmd2
olabilir: " cmd1
başarısız olursa, yürütmek ve sonra cmd2
.". Sorunuzda temel olarak istediğiniz şey budur.
OR ile benzer şekilde: cmd1 || cmd2
"çalıştır cmd1
, VEYA başarısız olursa " olarak yorumlanabilir cmd2
.
Protip: daha uzun zincirler için betiğinizi eklemeyi&&
düşünün set -e
. Temelde noktalı virgül değiştirir ;
içine &&
özel durumlarda bir çift.