Well, there are some other as well.<p>TCL works nice as a shell and is very elegant as a programming language. The famous equivalence of code and data is visible here, while still syntactically looking pretty normal.<p>Scheme (via <a href="https:&#x2F;&#x2F;scsh.net&#x2F;about&#x2F;about.html" rel="nofollow">https:&#x2F;&#x2F;scsh.net&#x2F;about&#x2F;about.html</a>) is also worth looking into. S-exp based syntax looks strange at first, but you get used to it rather quickly.<p>Emacs Eshell is very similar to xonsh, but with Emacs Lisp instead of Python.<p>On Windows PowerShell is also a choice. It&#x27;s both a shell and a sane, procedural programming language, with full access to dotNET.<p>Tulip (<a href="https:&#x2F;&#x2F;github.com&#x2F;tulip-lang&#x2F;tulip" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;tulip-lang&#x2F;tulip</a>) express goals are to be good for both shell work and programming.<p>On the other hand, jq (<a href="https:&#x2F;&#x2F;stedolan.github.io&#x2F;jq&#x2F;" rel="nofollow">https:&#x2F;&#x2F;stedolan.github.io&#x2F;jq&#x2F;</a>) is just a DSL, but it turns out it&#x27;s ok for doing more advanced work if you&#x27;re familiar with functional programming.<p>Not to mention, almost every language with a REPL can be made into a shell&#x2F;programming environment given enough library support. For example Python with IPython is a very decent shell and I think OCaml with utop could also be.