次の状況を想定します。
#!/bin/sh
case $1 in
e|ex|exa|exam|examp|exampl|example) echo "OK"
;;
t|te|tes|test) echo "Also OK"
;;
*) echo "Error!"
;;
esac
この状況について、よりエレガントで同時にPOSIX準拠のソリューションがあります(例:bash、zshなどはありません)。
PS必要もなくexampleeee
仕事もExam
ありません。
ベストアンサー1
あなたができることは比較を逆にすることです:
case "example" in
"$1"*) echo OK ;;
*) echo Error ;;
esac
複数の単語を使用すると、元のアイデアに固執することができます。
case "$1" in
e|ex|exa|exam|examp|exampl|example) : ;;
t|te|tes|test) : ;;
f|fo|foo) : ;;
*) echo error ;;
esac
または、ループと「ブール」変数を使用してください。
match=""
for word in example test foo; do
case "$word" in
"$1"*) match=$word; break ;;
esac
done
if [ -n "$match" ]; then
echo "$1 matches $match"
else
echo Error
fi
どちらが良いかを決めるのはあなた次第です。最初のものはとてもエレガントだと思います。