One of the strengths of any Unix-based or Unix-like systems is its support for multiple shells. Linux comes with the Bourne shell (sh), Bourne-again shell (bash), C shell (csh), Tenex C shell (tcsh), korn shell (ksh) and Z shell (zsh). By default, bash is used whilst scripts often use the Bourne shell.
I use sh, bash and tcsh most of the time. Each shell has its advantages and disadvantages, of course. The use of a particular shell is subjective – you choose which one suits you best.
The real differentiator between zsh and other shells, even the recent improvements provided in shells like bash, is the ability to customize the auto-completion system to work with more than just filenames and paths. Extending the functionality to support additional arguments to your existing commands is just one example, but the system is so flexible that you could almost complete any command or command-line element.
After reading this, it may just sway me over to use zsh over tcsh. How about you — what is your preferred shell?