Khi sử dụng, if [ ... ]
bạn thực sự đang sử dụng [
tiện ích (tương tự test
nhưng yêu cầu đối số cuối cùng là ]
).
[
không hiểu để chạy chức năng của bạn, nó mong đợi chuỗi. May mắn thay, bạn không cần phải sử dụng [
tất cả ở đây (ít nhất là cho chức năng):
if [ "$docheck" -eq 1 ] && notContainsElement "$fruit" "${blacklist[@]}"; then
...
fi
Lưu ý rằng trước tiên tôi cũng kiểm tra số nguyên, do đó chúng tôi có thể tránh gọi hàm nếu $docheck
không phải là 1.
Điều này hoạt động vì if
có một lệnh tùy ý và quyết định phải làm gì từ trạng thái thoát của lệnh đó. Ở đây chúng tôi sử dụng một [ ... ]
bài kiểm tra cùng với một cuộc gọi đến chức năng của bạn, với &&
phần giữa, tạo ra một lệnh ghép. Trạng thái thoát của lệnh ghép sẽ là đúng nếu cả [ ... ]
phép thử và hàm trả về 0 là trạng thái thoát của chúng, báo hiệu thành công.
Là một phong cách lưu ý, tôi sẽ không có xét nghiệm chức năng dù mảng nào không chứa nguyên tố này nhưng cho dù nếu không chứa nguyên tố này, và sau đó
if [ "$docheck" -eq 1 ] && ! contains "$fruit" "${blacklist[@]}"; then ...
Có một thử nghiệm chức năng một ý chí lộn xộn tiêu cực lên logic trong trường hợp bạn làm muốn kiểm tra xem mảng chứa các phần tử ( if ! notContainsElement ...
).