Anda bisa menggunakan case
pernyataan dalam if
tes, tetapi kode itu akan terlihat sedikit berbulu:
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
atau sedikit lebih pendek,
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
Ini menggunakan case
klausa hanya untuk melakukan pencocokan pola untuk if
klausa. Ini memperkenalkan tes benar / salah yang tidak perlu.
Lebih baik menggunakan 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
Jangan lakukan ini:
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
atau ini:
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
... karena Anda hanya menambahkan cruft yang lebih berbahaya, hanya untuk dapat menggunakan if
pernyataan dalam kode Anda sebagai pengganti case
pernyataan yang masuk akal .