Apa alasan menggunakan && alih-alih; untuk menempatkan perintah pada baris yang sama?


30

Tidak menjadi ahli di kedua Linux bukan Unix Saya bertanya-tanya apa perbedaan antara metode 2 ini merangkai 2 perintah pada baris yang sama? Saya tidak melihat perbedaan dalam output dalam contoh sederhana ini

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Ini tidak menyebabkan masalah - Saya hanya ingin tahu ..

Jawaban:


43

&&adalah logis 'dan'. Argumen pertama dievaluasi, dan yang kedua dievaluasi hanya jika yang pertama menghasilkan true. Alasannya adalah "false AND something" selalu false, jadi tidak perlu mengevaluasi argumen kedua dalam kasus ini.

Jadi menggunakan &&Anda memastikan bahwa perintah kedua tidak dieksekusi jika yang pertama melaporkan kesalahan ( truediwakili oleh kode keluar 0, yang menunjukkan bahwa tidak ada kesalahan). Sebaliknya, ;jalankan kedua perintah, tidak peduli apa hasil dari yang pertama.

Kesimpulan: Perintah chaining dengan &&adalah kebiasaan yang baik. Berbeda dengan ;itu tidak akan menjalankan perintah berikutnya jika ada kesalahan.


maksud Anda 0artinya trueatau itu 0berarti benar - ada kesalahan?
Michael Butler

1
@MichaelButler: 0berarti true. Saya telah menambahkan klarifikasi.
azimut

26

;

Menjalankan perintah secara berurutan, apa pun status keluar sebelumnya:

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

Logis dan

Jalankan perintah berikutnya, tetapi hanya jika perintah sebelumnya berhasil (status keluar adalah 0):

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

Logis atau

Jalankan perintah berikutnya, tetapi hanya jika perintah sebelumnya gagal (status keluar tidak 0 ):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command

6
Juga, sh -c "exit 0"bisa diganti dengan truedalam contoh ini, dan sh -c "exit 1"dengan false.
Flimm
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.