- functions: name() { ...; }, function name { ...; }, return, local,
unset -f; in pipes, & and $(...) they run in a subshell that gets all
function definitions and the positional parameters
- positional parameters $0, $1 ... ${10}, $#, "$@", "$*", $$; set by
gosh script args, gosh -c command name args, function calls,
source file args and set --; shift; for x without "in"
- case word in pattern|pattern) ...;; esac and { list; } groups
- read [-r] [-p prompt] [name ...] with $IFS splitting and $REPLY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- new parser (parser.go) for lists, pipelines, ! and if/elif/else/fi,
for ... in ... do/done, while/until ... do/done; simple commands are
kept as text and expanded when they run (in every iteration)
- break [n], continue [n] and the : builtin
- incomplete input (open control structure, trailing &&, |, quote or
backslash) continues on the next line: prompt "> " in interactive
shells, scripts and startup files read on
- Ctrl+C aborts the whole command line, including loops
- aliases are expanded at the start of every simple command, also inside
control structures
- control structures in pipelines, with redirections or in the
background are reported as not supported
- completion: commands after if, then, do etc.
- main_test.go reformatted with gofmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>