Bạn có thể sử dụng một casecâu lệnh trong một ifbà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 casemệnh đề chỉ để thực hiện khớp mẫu cho ifmệ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 ifcâu lệnh trong mã của bạn thay cho một casecâu lệnh hoàn toàn hợp lý .