Sie könnten eine case
Anweisung in einem if
Test verwenden, aber der Code würde ein bisschen haarig aussehen:
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
oder etwas kürzer,
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
Hierbei wird eine case
Klausel verwendet, um nur den Mustervergleich für die if
Klausel durchzuführen. Es wird ein unnötiger Wahr / Falsch-Test eingeführt.
Es ist besser, nur zu verwenden 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
Mach das nicht:
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
oder dieses:
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
... weil Sie nur eine gefährlichere Cruft hinzufügen, nur um eine if
Anweisung in Ihrem Code anstelle einer absolut vernünftigen case
Anweisung verwenden zu können.