Saya telah meretas banyak skrip shell, dan kadang-kadang hal paling sederhana membuat saya bingung. Hari ini saya menemukan skrip yang memanfaatkan :
bash builtin (usus besar) secara ekstensif .
The documenation tampaknya cukup sederhana:
: (a colon) : [arguments]
Jangan lakukan apa pun selain memperluas argumen dan melakukan pengalihan. Status pengembalian adalah nol.
Namun saya sebelumnya hanya melihat ini digunakan dalam demonstrasi ekspansi shell. Kasus penggunaan dalam skrip yang saya temui memanfaatkan struktur ini secara ekstensif:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
Sebenarnya ada ratusan greps, tetapi mereka hanya lebih sama. Tidak ada pengalihan input / output selain struktur sederhana di atas. Tidak ada nilai kembali yang diperiksa kemudian dalam skrip.
Saya membaca ini sebagai konstruksi tidak berguna yang mengatakan "atau tidak melakukan apa-apa". Tujuan apa yang bisa mengakhiri greps ini dengan "atau tidak melakukan apa-apa" melayani? Dalam hal apa konstruksi ini menyebabkan hasil yang berbeda dari hanya meninggalkan || :
dari semua contoh?
:
sebagai alternatiftrue
. Mungkinerrexit
diatur dan penulis tidak peduli dengan status keluar dari beberapa perintah.