case ~ 完全一致
case 'apple' in
app)
echo 'app' ;;
Apple)
echo 'Apple' ;;
apple)
echo 'apple' ;;
esac
case ~ パターンマッチ
パターン | 説明 |
---|---|
* | すべてにマッチする |
? | 任意の1文字にマッチする |
[AB] | A か B の文字にマッチする(A, B は任意の文字) |
[!AB] | A か B 以外の文字にマッチする(A, B は任意の文字) |
[A-Z] | A ~ Z の文字にマッチする(A, Z は任意の文字) |
[!A-Z] | A ~ Z 以外の文字にマッチする(A, Z は任意の文字) |
A | B | A か B の文字列にマッチする(A, B は任意の文字列) |
case 'apple' in
a*)
echo 'a*' ;;
*)
echo '*' ;;
esac
case 'apple' in
b*)
echo 'b*' ;;
*)
echo '*' ;;
esac
case 'apple' in
?pple)
echo '?pple' ;;
*)
echo '*' ;;
esac
case 'apple' in
????)
echo '????' ;;
a???e)
echo 'a???e' ;;
*)
echo '*' ;;
esac
case 'apple' in
[ab]pple)
echo '[ab]pple' ;;
[bc]pple)
echo '[bc]pple' ;;
*)
echo '*' ;;
esac
case 'apple' in
[a-z]pple)
echo '[a-z]pple' ;;
[A-Z]pple)
echo '[A-Z]pple' ;;
*)
echo '*' ;;
esac
case 'Apple' in
[a-z]pple)
echo '[a-z]pple' ;;
[A-Z]pple)
echo '[A-Z]pple' ;;
*)
echo '*' ;;
esac
case '2023' in
202[0-9])
echo '202[0-9]' ;;
*)
echo '*' ;;
esac
case '2023' in
202[!12])
echo '202[!12]' ;;
*)
echo '*' ;;
esac
case '2023' in
202[!4-9])
echo '202[!4-9]' ;;
*)
echo '*' ;;
esac
case 'apple' in
apple | orange)
echo 'apple | orange' ;;
peach | orange)
echo 'peach | orange' ;;
*)
echo '*' ;;
esac
case ~ 優先順位
上から順にマッチした条件が優先されます。
case '2023' in
202?)
echo '202?' ;;
2023)
echo '2023' ;;
*)
echo '*' ;;
esac
case ~ フォールスルー
「;;」の場合はそこでcaseを抜けますが、「;&」を使用した場合はフォールスルーします。
case '2023' in
2021) echo '2021' ;&
2022) echo '2022' ;&
2023) echo '2023' ;&
2024) echo '2024' ;&
2025) echo '2025' ;&
2026) echo '2026' ;&
*) echo '*' ;;
esac
フォールスルーしても「;;」でcaseを抜けます。
case '2023' in
2021) echo '2021' ;&
2022) echo '2022' ;&
2023) echo '2023' ;&
2024) echo '2024' ;&
2025) echo '2025' ;;
2026) echo '2026' ;&
*) echo '*' ;;
esac
「;&」の場合は次の条件にフォールスルーしますが「;;&」の場合は次にマッチする条件にフォールスルーします。
case '2023' in
202?) echo '202?' ;;&
2023) echo '2023' ;;&
2024) echo '2024' ;;&
202*) echo '202*' ;;&
2025) echo '2024' ;;&
*) echo '*' ;;
esac
「;;&」で次にマッチする条件にフォールスルーした場合でも次にマッチした条件が「;;」の場合はcaseを抜けます。
case '2023' in
202?) echo '202?' ;;&
2023) echo '2023' ;;&
2024) echo '2024' ;;&
202*) echo '202*' ;;
2025) echo '2024' ;;&
*) echo '*' ;;
esac