&gt; Check out the UNIX man for tail, grep, ... to see how strange above quote about &#x27;unix philosophy&#x27; is.<p>The &quot;UNIX philosophy&quot; is good, it&#x27;s just that UNIX doesn&#x27;t really follow it.<p>The C and shell programs that make up UNIX commands are actually UNIX&#x27;s own little <i>programming language</i>, complete with ad-hoc data types.<p>Look at `cat` for example. It might as well be `str + str...`. Or look at `grep`, it&#x27;s basically `filter` or `reduce` at heart. But it has to do this per-line, and it has no metadata about the line, it literally just works on string contents. The `head` and `tail` commands aren&#x27;t much different than `take` and `drop`. Heck there&#x27;s even a `sort` command.<p>That&#x27;s why shells that actually use a programming language (e.g. eshell) don&#x27;t seem so crazy to me. To be honest, I use eshell way more than I use bash, and half the functions I use there are written in lisp rather than bash or C.