Pertanyaan Apa alasan menggunakan && bukannya; untuk menempatkan perintah pada baris yang sama?


Tidak menjadi ahli baik Linux tidak Unix Saya bertanya-tanya apa perbedaan antara 2 metode 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 ..


30
2018-03-17 23:41


asal




Jawaban:


&& adalah 'dan' yang logis. Argumen pertama dievaluasi, dan yang kedua dievaluasi hanya jika yang pertama mengembalikan nilai true. Alasannya adalah bahwa "salah DAN sesuatu" selalu salah, jadi tidak perlu mengevaluasi argumen kedua dalam kasus ini.

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

Kesimpulan: Perangkaian perintah dengan && adalah kebiasaan yang baik. Berlawanan dengan ; itu tidak akan mengeksekusi perintah selanjutnya jika ada yang salah.


43
2018-03-17 23:44



apakah yang kamu maksud itu 0 cara true atau itu 0 Berarti benar - ada kesalahan? - Michael Butler
@MichaelButler: 0 cara true. Saya telah menambahkan klarifikasi. - azimut


;

Secara berurutan menjalankan perintah, tidak peduli apa 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 selanjutnya, 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"
#

||

Logika OR

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

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

26
2018-03-18 11:22



Juga, sh -c "exit 0" dapat diganti dengan true dalam contoh ini, dan sh -c "exit 1" dengan false. - Flimm