Structured data syshell has a
native support for common formats, allowing direct access, creation and
modification of JSON, CSV and other formats without relying on external
tools like jq and awk.
Error handling syshell is strict
by default. Errors automatically propagate through execution contexts.
Errors include detailed stack traces for debugging.
Functions Unlike bash, where
variables created in functions leak into the global scope by default,
syshell defaults to local variables and supports closures.
Strict scoping Variable usage is
statically checked before execution, preventing scoping errors and typos
early.
Argument parsing Function
declarations include syntax to specify options and arguments. In bash
and zsh arguments have to be parsed in code manually (e.g. using
getopts).
Native subcommands Functions
support multi-word identifiers; creating nested command structures like
git commit is very easy.
Explicit expansion Unlike POSIX
shells, syshell has no expansion phase. mkdir $name in bash
might expand $name and create multiple folders. In syshell,
it creates exactly one folder unless explicit expansion
(mkdir $folders...) is requested.
Speed Traditional shells often
create many short-lived processes, syshell has a rich set of builtins
that are significantly cheaper to run. Raw processing speed is also
good, syshell is several times faster than BSD awk and GNU awk at
parsing CSV.
syshell vs nushell
Data parsing and typing While
nushell supports many common formats, it often require piping or
explicit calling of marshalling functions. In some cases, e.g. when
parsing CSV, nushell tries to guess what type it is and converts it
implicitly. syshell provides a special syntax to parse different things
like dates, IPs, versions.
Function output Nushell has
complex rules for function output and returned values that differ
between external programs and built-in commands. When combined with
redirects and piping, it might be quite tricky to get it right. In
syshell, built-ins and external programs have identical semantics, pipes
and redirects work consistently.
Pattern matching Nushell has
pattern matching only in match blocks, while in syshell it
can be used in any assignment.
Performance Nushell implements map
and list updates via shallow copying, resulting in O(N) update complexity.
syshell has true O(1) maps and
lists. In general, syshell is architected with performance in mind, it's
currently 5x faster than
nushell at parsing CSV (all single core).
Value semantics Nushell focuses on
immutable data. This model restricts data mutation within closures and
prevents modifying captured variables. syshell permits that while
maintaining strict value semantics that allows safe data transfer across
pipelines.
Binary footprint Nushell's binary
size exceeds 30 MB, which limits its ability to replace traditional
shells in all situations. syshell's footprint matches bash at 1–2
MB.