Mặc dù tôi không trả lời câu hỏi ban đầu về lệnh no-op, nhưng nhiều vấn đề (nếu không phải là hầu hết) khi người ta có thể nghĩ rằng " trong nhánh này tôi không phải làm gì " có thể bỏ qua bằng cách đơn giản cấu trúc lại logic để nhánh này giành chiến thắng xảy ra
Tôi cố gắng đưa ra một quy tắc chung bằng cách sử dụng ví dụ OP
không làm gì khi $ a lớn hơn "10", in "1" nếu $ a nhỏ hơn "5", nếu không, hãy in "2"
chúng ta phải tránh một chi nhánh $a
có hơn 10, vì vậy$a < 10
một điều kiện chung có thể được áp dụng cho mọi điều kiện khác, sau đây.
Nói chung, khi bạn nói không làm gì khi X , thì hãy viết lại nó như tránh một nhánh trong đó X . Thông thường bạn có thể làm cho việc tránh xảy ra bằng cách đơn giản phủ định X và áp dụng nó cho tất cả các điều kiện khác.
Vì vậy, ví dụ OP với quy tắc được áp dụng có thể được cơ cấu lại như sau:
if [ "$a" -lt 10 ] && [ "$a" -le 5 ]
then
echo "1"
elif [ "$a" -lt 10 ]
then
echo "2"
fi
Chỉ là một biến thể của ở trên, kèm theo mọi thứ trong $a < 10
điều kiện:
if [ "$a" -lt 10 ]
then
if [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
fi
(Đối với ví dụ cụ thể này, tái cấu trúc @Flimzys chắc chắn tốt hơn, nhưng tôi muốn đưa ra một quy tắc chung cho tất cả những người tìm kiếm cách không làm gì cả.)
true
. Nó được tích hợp vào vỏ, và không làm gì cả.