shell: mrsh_state_init → mrsh_state_create
shell: rename mrsh_state.fd to term_fd
shell: hide definitions of mrsh_{variable,function}
Add -Wno-unused-result
frontend/readline: fix stupid GCC warnings
builtin/command: add support for running commands
builtin/command: implement -p
builtin/command: move logic out of the flag parsing loop

This ensures we've processed all flags before doing anything.
builtin/command: fix -v argument check
builtin/command: refuse -V's unspecified output format
shell/task/word: implement positional parameter expansion

My life is a perfect graveyard of buried hopes.
― L.M. Montgomery
shell/task/word: add prefix/suffix trim with full pattern support
shell/task/word: implement trim prefix/suffix operator for simple patterns

"Simple pattern" means it doesn't contain special pattern characters, so it
can just be handled as a raw string.
shell/task: use word_to_pattern when running case clauses

This allows us to correctly handle quoted parts of the pattern.
shell/word: expose word_to_pattern

We need to convert words to patterns in several places, not only when
performing pathname expansion.
shell/task/word: refuse to apply string param ops on $#

Refuse to apply string parameter operations on $#, except the string length
operator.
shell/task/word: make conditional parameter ops process words

This is a required step prior to adding $@ and $* support. Conditional
parameter operations can operate on those, which will need to return word
values to be able to indicate which parts can be subject to field splitting.
test/word: fix typo in ${parameter+word} tests

xPMo pointed out in a GitHub comment [1] that there is a typo.

[1]: https://github.com/emersion/mrsh/commit/b73d3a4c2725da651efb408a2d78b9faabe7719c#r35170878
test/word: disable one spec example

Neither dash nor busybox pass it.
ci: run alpine tests with dash
Next