Bạn có thể sử dụng một case
câu lệnh trong một if
bài kiểm tra, nhưng mã sẽ trông hơi nhiều lông:
if case "$1" in (cat|dog|mouse) true ;; (*) false; esac; then
printf '"%s" is one of cat, dog or mouse\n' "$1"
else
printf '"%s" is unknown\n' "$1"
fi
hoặc ngắn hơn một chút,
if ! case "$1" in (cat|dog|mouse) false; esac; then
printf '"%s" is one of cat, dog or mouse\n' "$1"
else
printf '"%s" is unknown\n' "$1"
fi
Điều này đang sử dụng một case
mệnh đề chỉ để thực hiện khớp mẫu cho if
mệnh đề. Nó giới thiệu một bài kiểm tra đúng / sai không cần thiết.
Tốt hơn hết là chỉ sử dụng case
:
case "$1" in
cat|dog|mouse)
printf '"%s" is one of cat, dog or mouse\n' "$1"
;;
*)
printf '"%s" is unknown\n' "$1"
esac
Đừng làm điều này:
is_one_of () {
eval "case $1 in ($2) return 0; esac"
return 1
}
if is_one_of "$1" 'cat|dog|mouse'; then
printf '"%s" is one of cat, dog or mouse\n' "$1"
else
printf '"%s" is unknown\n' "$1"
fi
hoặc này:
is_one_of () (
word=$1
shift
IFS='|'
eval "case $word in ($*) return 0; esac"
return 1
)
if is_one_of "$1" cat dog mouse; then
printf '"%s" is one of cat, dog or mouse\n' "$1"
else
printf '"%s" is unknown\n' "$1"
fi
... bởi vì bạn chỉ cần thêm hành trình nguy hiểm hơn, để có thể sử dụng một if
câu lệnh trong mã của bạn thay cho một case
câu lệnh hoàn toàn hợp lý .