Harap dicatat, itu [] && cmd
tidak sama dengan if .. fi
konstruksi.
Terkadang perilakunya sangat mirip dan Anda dapat menggunakannya [] && cmd
sebagai gantinya if .. fi
. Tapi hanya terkadang. Jika Anda memiliki lebih dari satu perintah untuk mengeksekusi jika kondisi atau Anda perlu if .. else .. fi
hati-hati dan whatch logikanya.
Beberapa contoh:
[ -z "$VAR" ] && ls file || echo wiiii
Tidak sama dengan
if [ -z $VAR ] ; then
ls file
else
echo wiii
fi
karena jika ls
akan gagal, echo
akan dieksekusi yang tidak akan terjadi dengan if
.
Contoh lain:
[ -z "$VAR" ] && ls file && echo wiii
tidak sama dengan
if [ -z "$VAR" ] ; then
ls file
echo $wiii
fi
meskipun konstruksi ini akan bertindak sama
[ -z "$VAR" ] && { ls file ; echo wiii ; }
harap diperhatikan ;
setelah gema penting dan harus ada di sana.
Jadi melanjutkan pernyataan di atas bisa kita katakan
[] && cmd
== jika perintah pertama berhasil maka jalankan perintah berikutnya
if .. fi
== jika kondisi (yang mungkin merupakan perintah tes juga) maka jalankan perintah
Jadi untuk portabilitas antara [
dan hanya [[
digunakan [
.
if
kompatibel dengan POSIX. Jadi, jika Anda harus memilih di antara [
dan if
memilih melihat tugas Anda dan perilaku yang diharapkan.
[ … ]
vs[[ … ]]
vstest …
, ada jawaban yang lebih lengkap di sebagian besar pertanyaan duplikat ini .