Apa kelebihan dan kekurangan menggunakan && atau || versus if / elif / else?

0

Dalam bash, saya dapat membuat kondisi pengujian menggunakan & amp; & amp; dan / atau || daripada blok if / elif / else.

Ketika berlaku, saya menggunakan cenderung menggunakan & amp; & amp; dan / atau || daripada membangun blok if. Apakah ada keuntungan dunia nyata untuk satu konstruksi di atas yang lain?

Perhatikan contoh-contoh berikut:

1)

[[ -f /shared_disk/backups/daily.tar.bz2 ]] && echo "the coast is clear" || echo "run the dump"

2)

if [[ -f /shared_disk/backups/daily.tar.bz2 ]]; then
    echo "the coast is clear"
else
    echo "run the dump"
fi
derek_jenkins
sumber

Jawaban:

5

Dua bentuk yang Anda sajikan tidak persis sama.

Dalam bentuk: A && B || C, C akan dieksekusi jika salah A atau B mengevaluasi sebagai salah.

Sebagai contoh:

$ true && true || echo C
$ true && false || echo C
C
$

Ini memberikan satu keuntungan dunia nyata dari if-then-else formulir di atas A && B || C bentuk dan itu adalah kejelasan. Lebih jelas apa itu if-then-else formulir lakukan, tetapi Anda perlu memahami aturan evaluasi untuk memahami apa itu A && B || C formulir lakukan.

Namun sering dapat bermanfaat untuk digunakan A && B atau A || B. Itu lebih jelas dan dapat berguna ketika perintah sederhana sedang dijalankan. Terkadang satu baris alih-alih tiga lebih jelas, terutama ketika Anda mencoba menerima sejumlah besar kode.

camh
sumber
4
IMO hal yang paling membingungkan tentang penggunaan && || dari pada if then else adalah bahwa ia dapat menjalankan kedua perintah seperti itu dan perintah like-like (jika perintah pertama berhasil dan yang kedua gagal). Anda tidak benar-benar mengharapkan echo perintah untuk gagal, tetapi itu bisa terjadi, dan itu akan sangat membingungkan jika memang pernah terjadi. Yang tepat if then else pernyataan berjalan baik then perintah atau else perintah, tak pernah kedua.
Gordon Davisson
@GordonDavisson: Mengapa Anda tidak memposting itu sebagai jawaban?
Scott
@Scott: Saya menganggap jawaban camh sepenuhnya benar, saya hanya menunjukkan konsekuensi yang sangat mengganggu.
Gordon Davisson