Bash / sh - perbedaan antara && dan;

139

Saya biasanya menggunakan ;untuk menggabungkan lebih dari satu perintah dalam satu baris, tetapi beberapa orang lebih suka &&. Apakah ada bedanya? Misalnya, cd ~; cd -dan cd ~ && cd -sepertinya membuat hal yang sama. Versi apa yang lebih portabel, misalnya akan didukung oleh bash-subset seperti shell Android atau lebih?

psihodelia.dll
sumber

Jawaban:

197

Jika perintah sebelumnya gagal, perintah ;kedua akan dijalankan.

Tapi dengan &&yang kedua tidak akan berjalan.

Ini adalah operand "lazy" logical "AND" antar operasi.

ignar
sumber
2
Dengan kata lain, ini memiliki perilaku korsleting
peterchaula
@peter Yang mana? Yang ;satu atau yang itu &&? Atau apakah yang Anda maksud keduanya?
Shayan
@ Shayan, itu &&.
peterchaula
58

Saya menggunakan &&karena lama sekali di komputer terdekat:

root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C

tapi tidak membantu ...;)

cd /tnp/test && rm -rf * aman... ;)

jm666
sumber
27
Agar lebih aman, saya akan menggunakanrm -rf /tnp/test
melvynkim
7
Untuk menjadi lebih aman lebih baik digunakan rm /tnp/test/ -rfuntuk mencegah masuk yang mematikan salah klik
radrow
22

Dalam cmd1 && cmd2, cmd2hanya dijalankan jika cmd1berhasil (mengembalikan 0).

Dalam cmd1 ; cmd2, cmd2dieksekusi dalam kasus apa pun.

Kedua konstruksi tersebut merupakan bagian dari shell yang sesuai dengan POSIX.

Pascal Cuoq
sumber
11

&&berarti menjalankan perintah selanjutnya jika sebelumnya keluar dengan status 0. Untuk sebaliknya, gunakan ||ie untuk dieksekusi jika perintah sebelumnya keluar dengan status tidak sama dengan 0 ;selalu dieksekusi.

Sangat berguna ketika Anda perlu mengambil tindakan tertentu tergantung pada apakah perintah sebelumnya selesai OK atau tidak.

Fredrik Pihl
sumber
5

Perintah yang dipisahkan oleh ;dijalankan secara berurutan terlepas dari status penyelesaiannya.

Dengan &&, perintah kedua dijalankan hanya jika yang pertama berhasil diselesaikan (mengembalikan status keluar 0).

Ini tercakup dalam halaman manual bash di bawah Lists. Saya mengharapkan shell mirip Unix untuk mendukung kedua operator ini, tetapi saya tidak tahu secara spesifik tentang shell Android.

Dave Costa
sumber
2
Berikut ini tautan ke manual bash: gnu.org/software/bash/manual/bashref.html#Lists
glenn jackman
3

&&memungkinkan untuk eksekusi bersyarat sementara ;selalu perintah kedua dijalankan.

Misalnya command1 && command2, command2hanya akan dieksekusi ketika command1telah diakhiri dengan exit 0, pensinyalan semua berjalan dengan baik, sedangkan pada command1 ; command2perintah kedua akan selalu dijalankan tidak peduli apa pun hasilnya command1.

Marcel
sumber
1

&& logis DAN dalam bash. Bash memiliki evaluasi sirkuit pendek AND logis. Idiom ini adalah cara yang lebih sederhana untuk mengungkapkan hal berikut:


cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi

Sedangkan ; versi hanyalah:


cmd1
cmd2
terus terang
sumber