Case statement: pattern matching.
Examples
# case $var in
# pattern1) commands1 ;;
# pattern2|pattern3) commands2 ;;
# *) default ;;
# esac
%Case{
word: %Word{parts: [{:variable, "var"}]},
cases: [
{[%Word{parts: [{:literal, "pattern1"}]}], [...]},
{[%Word{parts: [{:literal, "pattern2"}]},
%Word{parts: [{:literal, "pattern3"}]}
], [...]},
{[%Word{parts: [{:literal, "*"}]}], [...]}
]
}
Summary
Types
@type case_clause() :: {patterns :: [Bash.AST.Word.t()], body :: [Bash.Statement.t()], terminator()}
@type t() :: %Bash.AST.Case{ cases: [case_clause()], exit_code: 0..255 | nil, matched_pattern_index: non_neg_integer() | nil, meta: Bash.AST.Meta.t(), state_updates: map(), word: Bash.AST.Word.t() }
@type terminator() :: :break | :fallthrough | :continue_matching