Hãy xem xét hai biểu thức điều kiện expr1
và expr2
, ví dụ $i -eq $j
và $k -eq $l
. Chúng ta có thể viết điều này theo bash
một số cách. Đây là hai khả năng
[[ expr1 || expr2 ]]
[[ expr1 ]] || [[ expr2 ]]
Tôi khá chắc chắn rằng tôi đã thấy các khuyến nghị ở đây rằng thứ hai nên được ưu tiên, nhưng tôi không thể tìm thấy bằng chứng để hỗ trợ điều này.
Đây là một kịch bản mẫu dường như chứng minh không có sự khác biệt:
for i in 0 1
do
for j in 0 1
do
for k in 0 1
do
for l in 0 1
do
if [[ $i -eq $j || $k -eq $l ]]; then printf "1-yes\t"; else printf "1-no\t"; fi
if [[ $i -eq $j ]] || [[ $k -eq $l ]]; then printf "2-yes\n"; else printf "2-no\n"; fi
done
done
done
done
và đầu ra cho thấy cả hai cấu trúc điều kiện tạo ra cùng một kết quả:
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-no 2-no
1-no 2-no
1-yes 2-yes
1-yes 2-yes
1-no 2-no
1-no 2-no
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
Có bất kỳ lợi ích nào khi sử dụng cấu trúc này so với cấu trúc kia không?
Đối với điểm thưởng, cùng một câu hỏi nhưng khái quát cho nhiều điều kiện bằng cách sử dụng ||
và &&
. Ví dụ , [[ expr1 && expr2 || expr3 ]]
.
[
hoặctest
( không[[
), tìm kiếm cácOB
thẻ (được liên kết với định nghĩa "lỗi thời") trong thông số POSIX chotest
. Trongtest
đó, có một số trường hợp bệnh lý trong đó không thể biết được(
hoặc)
có nghĩa là cú pháp có ý nghĩa đối với lệnh kiểm tra hoặc chuỗi cần kiểm tra hay không, vì vậy những người bỏ qua các dấu hiệu lỗi thời và sử dụng cú pháp đó thực sự có thể cần cách khác-"x$foo"
thực hành lỗi thời ; với[[
, đó không phải là một vấn đề.