Bash – Unique Features of bash compared to zsh

bashshellzsh

I have been a zsh user for quite some time (before that tcsh and before that csh). I am quite happy with it, but was wondering if there are any compelling features of bash that do not exist in zsh. And conversely, are there zsh features which do not exist in bash. My current feel is that bash is better:

  • If you are familiar with it already and don't want to learn new syntax.
  • It is going to exist on most all *nix machines by default, whereas zsh may be an extra install.

Not trying to start a religious battle here, which is why I'm just looking for features which exist in only one of the shells.

Best Answer

zsh is for vulcans. ;-)

Seriously: bash 4.0 has some features previously only found in zsh, like ** globbing:

% ls /usr/src/**/Makefile

is equivalent to:

% find /usr/src -name "Makefile"

but obviously more powerful.

In my experience bash's programmable completion performs a bit better than zsh's, at least for some cases (completing debian packages for aptitude for example).

bash has Alt + . to insert !$

zsh has expansion of all variables, so you can use e.g.

% rm !$<Tab>

for this. zsh can also expand a command in backtics, so

% cat `echo blubb | sed 's/u/a/'`<Tab>

yields

% cat blabb

I find it very useful to expand rm *, as you can see what would be removed and can maybe remove one or two files from the commmand to prevent them from being deleted.

Also nice: using the output from commands for other commands that do not read from stdin but expect a filename:

% diff <(sort foo) <(sort bar)

From what I read bash-completion also supports completing remote filenames over ssh if you use ssh-agent, which used to be a good reason to switch to zsh.

Aliases in zsh can be defined to work on the whole line instead of just at the beginning:

% alias -g ...="../.."
% cd ...