Saat menggunakan if [ ... ]
Anda sebenarnya menggunakan [
utilitas (yang sama dengan test
tetapi mengharuskan argumen terakhir ]
).
[
tidak mengerti untuk menjalankan fungsi Anda, ia mengharapkan string. Untungnya, Anda tidak perlu menggunakan [
sama sekali di sini (setidaknya untuk fungsi):
if [ "$docheck" -eq 1 ] && notContainsElement "$fruit" "${blacklist[@]}"; then
...
fi
Perhatikan bahwa saya juga memeriksa integer terlebih dahulu, sehingga kita dapat menghindari memanggil fungsi sama sekali jika $docheck
bukan 1.
Ini berfungsi karena if
mengambil perintah sewenang-wenang dan memutuskan apa yang harus dilakukan dari status keluar dari perintah itu. Di sini kami menggunakan [ ... ]
tes bersama dengan panggilan ke fungsi Anda, dengan &&
di antaranya, membuat perintah majemuk. Status keluar perintah majemuk akan benar jika [ ... ]
tes dan fungsi mengembalikan nol sebagai status keluarnya, menandakan keberhasilan.
Sebagai catatan gaya, saya tidak akan memiliki tes fungsi apakah array tidak mengandung elemen tetapi apakah jika memang mengandung elemen, dan kemudian
if [ "$docheck" -eq 1 ] && ! contains "$fruit" "${blacklist[@]}"; then ...
Memiliki tes fungsi akan mengacaukan negatif up logika dalam kasus di mana Anda lakukan ingin menguji apakah array berisi elemen ( if ! notContainsElement ...
).