“command && command” ve “command” arasındaki fark nedir? komut”


49

Bu iki kullanımı Ubuntu'da "command && command" ve "command; command" ta görüyorum,
örn.apt-get update && apt-get upgrade

Kullanırsam ne farklı olurdu apt-get update; apt-get upgrade?
Bu spesifik kullanım için sormuyorum ama genel olarak bu iki kullanım arasındaki fark nedir?


2
Win komut satırı ve toplu aynı özelliği var: & (simple sequencing), && (conditional AND) and || (conditional OR).
Karan

5
Ayrıca bakınız: Bash Referans Kılavuzu - Komutların listesi . Genel olarak, belgelerde bulamadığınız hiçbir şey yoktur; Belirli sözdizimi öğeleriyle ilgili bir sorunuz varsa gerçekten bakmaya değer.
slhck

1
@Karan Ve bütünlüğü için bash (linux / Ubuntu) ||de vardır.
Izkata

Yanıtlar:


88

&&mantıksal bir operatördür. ;basit sıralamadır.

Yılında cmd1 && cmd2, CMD2 sadece başarılı bir dönüş kodu ile cmd1 çıkar eğer işletilecek.

Oysa cmd1; cmd2, cmd2, cmd1'in çıkış durumundan bağımsız olarak çalışacaktır (betiğinizdeki tüm hatalardan çıkmak için kabuğunuzu ayarlamadığınız varsayılmıştır).

İlgili bir notta, 'VEYA' mantıksal işlecini cmd1 || cmd2kullanarak ||cmd2 yalnızca cmd1 başarısız olursa çalıştırılır (sıfır olmayan bir çıkış kodu döndürür).

Bu mantıksal operatörler bazen komutlarda temel bir if ifadesi yerine kullanılır. Örneğin,

if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi

... ile daha net bir şekilde başarılabilir:

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"

Bunu biraz yanıltıcı buluyorum çünkü benim anladığım kadarıyla başarılı bir geri dönüş kodu 0 anlamına gelir; Bu nedenle, çoğu dilde kullanılan Mccarthy değerlendirme felsefesine göre, bir sonraki ifadeyi değerlendirmek (yürütmek) yerine derhal yanlış döndürmelidir.
Della

33

Sözdizimi

command1 && command2

komut2 , yalnızcacommand1sıfırın ( true )çıkış durumunu döndürürseçalıştırılır. Başka bir deyişle, koşcommand1ve başarılı olursa koşcommand2.

command1 ; command2

Hem komut1 hem de komut2 bağımsız olarak yürütülür. Noktalı virgül, bir satıra birçok komutu yazmanıza izin verir.

İlgili :

command1 || command2

komut2 , yalnızca komut1 sıfır olmayan bir çıkış durumuverirse çalıştırılır. Başka bir deyişle,command1başarıyla çalıştırın veya çalıştırıncommand2.


Örnek

&& Şebeke:

$ rm /tmp/filename && echo "File deleted"

; Şebeke:

$ echo "foo" ; echo "bar"

|| Şebeke:

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"

Dış bağlantılar

  1. Linuxtopia.org
  2. Tldp.org
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.