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.

Video

Further reading and video