+<latemp_subject "Stop Using (and Teaching) C-Shell and Tcsh" />
+<b>Last Updated:</b> 01-October-2007
+You should stop using, learning and teaching
+<a href="http://en.wikipedia.org/wiki/C_shell">C-Shell</a> and its
+extended <a href="http://en.wikipedia.org/wiki/Tcsh">Tcsh</a>
+implementation, because of their horrible, inconsistent syntax, lack
+of usability and the fact that they induce bad habits. The reasons for that
+Tom Christiansen's (of Perl fame) wrote
+Considered Harmful</a>, which gives many good arguments for csh's
+inadequacy as a shell scripting language.
+<a href="http://www.grymoire.com/Unix/CshTop10.txt">Bruce Barnett's
+"Top Ten Reasons not to use the C shell"</a> gives more convincing arguments,
+and illustrates how awful csh is.
+Bash has real functions (as well as aliases) instead of just aliases, that
+Bash has proper quoting. Handling whitespace in csh is painful. I once
+witnessed a pair of Technion students get bogged down writing the solution for
+a homework exercise, because they wanted their C-Shell script to handle
+whitespaces properly. I later tried the same with bash, and it was trivial to
+Bash is the default scripting and login shell on Linux.
+ksh is the default login and scripting shell on non-GNU System V systems.
+On recent version of Mac OS X, bash is the default scripting and login shell.
+Only on the Open Source BSD variants, ash (a slightly enhanced Bourne
+shell implementation) is the scripting shell and tcsh is the default login
+On cygwin the default shell is bash. zsh is available for either cygwin
+or for non-cygwinned win32.
+In all cases, C-Shell is not used for scripting at all, only perhaps for
+interactive use. And Bash/ksh/zsh is now often used for both.
+Entire Bash mini-programs can be written, tested and debugged in one line.
+This is impossible to do in csh which forces loops to be on separate lines.
+Sub-shells and capture-subshells (<tt>$(...)</tt>) actually work in Bourne
+Shell. And Bash <b>has</b> capture-subshells which are much safer than
+The students tend to conclude that C-shell is "The UNIX Shell". Seeing how
+lame C-shell is they tend to believe that the UNIX shell sucks. Which is not
+the case for Bash and friends which are beautiful and a joy to work with.
+The wrong legacy reasons: many institutions once thought they had to make a
+choice between sh (which had a sane syntax and programmability but bad for
+interactive use) and tcsh which had bad programmability but with good
+For this generation the choice is clear: bash or zsh that combine both good
+programmability and good interactive use. There's no reason to keep using
+Instead you should use, learn and teach one of the following shells:
+<a href="http://www.gnu.org/software/bash/">GNU Bash - the
+Bourne-Again-Shell</a> - an extended Bourne-shell-compatible shell, with
+good usability. Great for both interactive use and scripting. The default
+<a href="http://www.zsh.org/">Zsh - the Z-shell</a> - the Emacs of shells:
+a shell that has everything, including the kitchen sink. Also Bourne-shell
+There's also <a href="http://www.kornshell.com/">The Korn Shell</a> which
+has lately been open-sourced, but I have never really tried it. It should
+be a very decent shell, though.
+For academic teaching I suggest teaching the common base of these shells,
+possibly with some bash extensions.
+Linux-IL thread with many comments</a>
+<a href="http://www.mail-archive.com/lin-club%40vipe.technion.ac.il/msg00643.html">a thread in the Haifa Linux Club mailing list with some comments</a>.