shell scripting is pretty nice for doing little things. and they aren't all exactly the same, but you can pretty much write scripts for any bourne based shell if you learn how to write them for one. Really the only thing's that are annoying is learning the stuff with quotations, and the different brackets. If it wasn't for that it's wouldn't be bad.
I feel like that's also a problem for elisp too. so that part really doesn't see any improvements. shit is like 80% parenthesis.
brackets for variable expansion, variable expansion with prefix removal, variable expansion with suffix removal, conditional variable expansion, command substitution, command lists, subshell execution, ...
... and then there's the issue of whether you want "expansion but delete some whitespace" (the default, of course) or "just expansion" or "command substitution but delete some whitespace" (also the default) or "command substitution but delete only some trailing newlines" (there is no "just command substitution").
... compared to "
(
starts a list,
)
ends a list."
How similar! Truly, both sides are just as bad.
Also, learning with a certain shell tends to cause you to inherit its implementation-specific solutions to the requirements left unfulfilled by posix, unless you go out of your way to look up every feature you use in the standard. Things like arrays. And no, "just never use strings with spaces in them" is not an acceptable solution. There are standards-compliant ways to do such things, but they are extremely convoluted and involve eval.
Barely related, but if you ever want to perfom an exercise in futility (maybe there's a justification for it... somewhere?), try writing a shell script that only uses the utilities that posix guarantees to be builtin. Funnily enough, it can actually do input using 'read', but can't do any output aside from creating empty files with certain names. I may have some experience with such a waste of time.