Harap dicatat, itu [] && cmdtidak sama dengan if .. fikonstruksi.
Terkadang perilakunya sangat mirip dan Anda dapat menggunakannya [] && cmdsebagai gantinya if .. fi. Tapi hanya terkadang. Jika Anda memiliki lebih dari satu perintah untuk mengeksekusi jika kondisi atau Anda perlu if .. else .. fihati-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 lsakan gagal, echoakan 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 [.
ifkompatibel dengan POSIX. Jadi, jika Anda harus memilih di antara [dan ifmemilih melihat tugas Anda dan perilaku yang diharapkan.
[ … ]vs[[ … ]]vstest …, ada jawaban yang lebih lengkap di sebagian besar pertanyaan duplikat ini .