There's already been quite a bit of activity on the topic on other Stack Exchange sites. My experience of switching from bash to zsh, as far as can remember (it was years ago²), is that I didn't miss a single thing. I gained a lot; here are what I think are the simple zsh-specific features that I use most:
The zsh feature I most miss when I occasionally use bash is autocd: in zsh, executing a directory means changing to it, provided you turn on the
Another very useful feature is the fancy globbing. The
hieroglyphscharacters are a bit hard to remember but extremely convenient (as in, it's often faster to look them up than to write the equivalent
find command). A few of the simpler examples:
foo*~*.bak = all matches for
foo* except those matching
foo*(.) = only regular files matching
foo*(/) = only directories matching
foo*(-@) = only dangling symbolic links matching
foo*(om[1,10]) = the 10 most recent files matching
foo*(Lm+1) = only files of size > 1MB
foo* in the directory
dir and all its subdirectories, recursively⁴
For fancy renames, the
zmv builtin can be handy. For example, to copy every file to
name.bak: zmv -C '(*)(.)' '$1.bak'
Both bash and zsh have a decent completion system that needs to be turned on explicitly (
. /etc/bash_completion or
autoload -U compinit; compinit). Zsh is much more configurable and generally fancier.
If you run zsh without a
.zshrc, it starts an interactive menu that lets you choose configuration options. (Some distributions may disable this; in that case, run
autoload zsh-newuser-install; zsh-newuser-install.) I recommend enabling the recommended history options, turning on (“new-style”) completion, and turning on the “common shell options” except
beep. Later, configure more options as you discover them.
²At the time programmable completion was zsh's killer feature, but bash acquired it soon after.
⁴Features that bash aquired only in version 4 (so are still not available on many systems) are in smaller type.