Apa perbedaan antara double-ampersand (&&) dan titik koma (;) di Linux Bash?


112

Apa perbedaan antara ampersand dan titik koma di Linux Bash ?

Sebagai contoh,

$ command1 && command2

vs.

$ command1; command2

6
Saya menjawab ini di sini: superuser.com/a/619019/107862
Etan Reisner

9
Mengenai di luar topik, terakhir kali saya periksa, bash masih bahasa pemrograman, tetapi saya salah sebelumnya dan itu bisa berupa permen buah kering.
Steve K

Ya, dan jika Anda mengajukan pertanyaan tentang perilaku tertentu atau cara yang benar untuk melakukan hal tertentu, itu pasti sesuai topiknya. Ini termasuk dalam kategori abu-abu dari "pertanyaan tentang sintaksis bahasa" yang tidak sejelas pertanyaan "pemrograman" sejauh yang saya ketahui.
Etan Reisner

4
bash dalam beberapa hal kering, dan dalam beberapa hal manis. Pada akhirnya itu cukup menyenangkan dan mudah dicerna. Bagaimanapun, itu tidak dapat dengan mudah dicuri dari bayi.
code_monk

Jawaban:


139

The &&operator adalah boolean operator AND: jika sisi kiri mengembalikan status non-nol keluar, operator pengembalian yang status dan tidak mengevaluasi sisi kanan (pendek-sirkuit), jika tidak mengevaluasi sisi kanan dan mengembalikan status keluar nya . Ini biasanya digunakan untuk memastikan bahwa command2hanya dijalankan jika command1berhasil dijalankan.

The ;Token hanya memisahkan perintah, sehingga akan menjalankan perintah kedua terlepas dari apakah atau tidak yang pertama berhasil.


6
apakah ampersand ganda &&berbeda dari satu ampersand &di bash?
Charlie Parker

16
@CharlieParker &menyebabkan perintah dijalankan di latar belakang, jadi ya. "Jalankan ini di latar belakang" sangat berbeda dengan "jalankan perintah berikut ini hanya jika yang lain ini berhasil."
cdhowie

Perintah2 hanya akan menjalankan perintah1 mengembalikan status keluar nol , artinya selesai dengan sukses ..
Nik

Apakah ;masih menunggu perintah pertama selesai?
rfii

@rfii Ya, tetapi ia menjalankan perintah kedua tanpa memperhatikan apakah perintah pertama berhasil. a;bartinya "lari alalu lari b." a&&bartinya "lari a, lalu jalankan bhanya jika aberhasil".
cdhowie

33

perintah1 && perintah2

command1 && command2dijalankan command2jika (dan hanya jika) command1eksekusi berakhir dengan sukses. Dalam jargon Unix, itu berarti kode keluar / kode pengembalian sama dengan nol.

perintah1; perintah2

command1; command2dieksekusi command2setelah dieksekusi command1, secara berurutan. Tidak peduli apakah perintah itu berhasil atau tidak.


6

Yang pertama adalah logika sederhana yang ANDmenggunakan evaluasi hubung singkat, yang terakhir hanya membatasi dua perintah.

Apa yang terjadi secara nyata adalah ketika program pertama mengembalikan kode keluar bukan nol, keseluruhan ANDdievaluasi FALSEdan perintah kedua tidak akan dijalankan. Kemudian hanya mengeksekusi keduanya secara berurutan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.