Frequently Asked Question
What's the difference between bash, zsh, fish, dash, and sh?
sh is the original Bourne shell from 1979, the lowest common denominator and the
target of the POSIX shell standard. Almost no Linux system actually ships the
original Bourne binary any more; instead /bin/sh is a symlink to whichever shell
the distribution has chosen to play that role. On Debian and Ubuntu it points to
dash, a small, fast, strictly POSIX shell used for system scripts. On Fedora and
Arch it points to bash running in POSIX mode.
bash (the GNU Bourne-Again Shell, written by Brian Fox in 1989) is the default
interactive shell on most Linux distributions: POSIX-compatible but with many
extensions, well-documented, and the target of nearly every tutorial. zsh is a
richer shell with better tab completion, plugins, and themes, the default on macOS
since Catalina, and very popular among developers via frameworks like Oh My Zsh.
fish is a younger shell with sensible defaults, syntax highlighting, and
autosuggestions out of the box, but it is not POSIX-compatible, so scripts written
for sh or bash won't run unmodified. Pick bash if you want safety and
portability, zsh or fish if you want a nicer interactive experience.