apa perbedaan antara "command && command" dan "command; perintah"

49

Saya melihat dua penggunaan ini di Ubuntu "command && command" dan "command; command",
misapt-get update && apt-get upgrade

Apa yang akan berbeda jika saya gunakan apt-get update; apt-get upgrade?
Saya tidak meminta penggunaan khusus ini tetapi secara umum apa perbedaan antara kedua penggunaan ini?

Evilsoup
sumber
2
Win baris perintah dan batch yang memiliki fitur yang sama: & (simple sequencing), && (conditional AND) and || (conditional OR).
Karan
5
Lihat juga: Bash Reference Manual - Daftar perintah . Secara umum, tidak ada yang tidak dapat Anda temukan di dokumentasi; itu benar-benar layak dilihat jika Anda memiliki pertanyaan tentang elemen sintaksis tertentu.
slhck
1
@Karan Dan untuk kelengkapan, bash (linux / Ubuntu) ||juga.
Izkata

Jawaban:

88

&&adalah operator yang logis. ;adalah urutan sederhana.

Dalam cmd1 && cmd2, cmd2 hanya akan dijalankan jika cmd1 keluar dengan kode pengembalian yang berhasil.

Sedangkan dalam cmd1; cmd2, cmd2 akan berjalan terlepas dari status keluar cmd1 (dengan asumsi Anda belum menyetel shell Anda untuk keluar pada semua kegagalan dalam skrip Anda atau sesuatu).

Pada catatan terkait, dengan cmd1 || cmd2, menggunakan ||operator logika 'OR', cmd2 hanya akan berjalan jika cmd1 gagal (mengembalikan kode keluar yang tidak nol).

Operator logis ini terkadang digunakan dalam skrip sebagai pengganti pernyataan if dasar. Sebagai contoh,

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

... dapat dicapai secara lebih ringkas dengan:

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"
Etan Reisner
sumber
Saya merasa sedikit salah karena dari pemahaman saya, kode pengembalian yang berhasil berarti 0, yang, ketika dimasukkan ke dalam bool, memberikan false false. Jadi mengikuti filosofi evaluasi Mccarthy yang digunakan dalam kebanyakan bahasa, itu harus segera mengembalikan false daripada mengevaluasi (menjalankan) pernyataan berikutnya.
Della
33

Sintaksis

command1 && command2

command2 dijalankan jika, dan hanya jika,command1mengembalikan status keluar dari nol ( benar ). Dengan kata lain, jalankancommand1dan jika berhasil, maka jalankancommand2.

command1 ; command2

Baik command1 dan command2 akan dieksekusi terlepas Tanda titik koma memungkinkan Anda mengetik banyak perintah pada satu baris.

Terkait :

command1 || command2

command2 dijalankan jika, dan hanya jika, command1 mengembalikan status keluar yang tidak nol. Dengan kata lain, jalankan dengancommand1sukses atau jalankancommand2.


Contoh

&& operator:

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

; operator:

$ echo "foo" ; echo "bar"

|| operator:

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

Tautan Eksternal

  1. Linuxtopia.org
  2. Tldp.org
stderr
sumber