Each entry records the shell's default prompt character, provenance, and habitat, followed by the three questions that matter: why it was made, what it's used for, and the niche it holds.
Bourne shell
$
sh — the common ancestor
- Appeared
- 1979, Version 7 Unix
- Creator
- Stephen Bourne, Bell Labs
- Habitat
- Effectively extinct as a living program; survives as the POSIX
sh specification and as /bin/sh, which is nearly always another shell in disguise
Why it was made
Ken Thompson's original 1971 shell could run commands but barely program. Bourne rebuilt it as a real scripting language — variables, control flow, functions, here-documents — so Unix could automate itself.
Niche
The lingua franca. Its grammar became the POSIX shell standard, which is why bash, dash, ksh, and zsh can all run each other's plain scripts. When people say "write portable shell," they mean "write Bourne." You interact with its ghost every time a script begins #!/bin/sh.
bash
$
Bourne-Again SHell
- Appeared
- 1989
- Creator
- Brian Fox, for the GNU Project
- Habitat
- Default login shell on most Linux distros and older macOS; ubiquitous on servers
Why it was made
The GNU Project needed a free-software replacement for the proprietary Bourne shell. Fox wrote one that was Bourne-compatible but folded in the interactive comforts of csh (history, job control) and ksh (functions, arithmetic).
What it's used for
Everything: login sessions, system scripts, CI pipelines, the glue of the internet.
Niche
The default. Not the fastest, not the most elegant, but the shell most likely to exist on any machine you SSH into — which makes bash knowledge (yours) the most transferable skill in this guide.
dash
$
Debian Almquist SHell
- Appeared
- 1997 (port of ash, 1989)
- Creator
- Herbert Xu, from Kenneth Almquist's ash
- Habitat
/bin/sh on Debian and Ubuntu; ash lives on in BusyBox and Alpine
Why it was made
Almquist wrote ash as a small, license-clean Bourne clone for BSD. Debian adopted a Linux port because bash had grown big and slow for the hundreds of tiny scripts that run at boot.
What it's used for
Executing #!/bin/sh scripts — boot sequences, package maintainer scripts, embedded systems. Nobody uses dash interactively; it has no tab completion or history to speak of.
Niche
The minimalist workhorse. Strictly POSIX, tiny footprint, roughly 4× faster to start than bash. It's also the reason "bashisms" break on Ubuntu: sh script.sh there runs dash, not bash.
ksh
$
KornShell
- Appeared
- 1983 (ksh88), 1993 (ksh93)
- Creator
- David Korn, Bell Labs
- Habitat
- Default on AIX; long-standing presence on commercial Unix and in banking/telecom scripts
Why it was made
Bell Labs users wanted csh's interactive features without abandoning Bourne's scripting language. Korn unified them, then pushed further: associative arrays, floating-point arithmetic, real scripting power years before bash had it.
What it's used for
Legacy enterprise scripting. Vast bodies of ksh code still run inside financial institutions and on AIX/Solaris systems.
Niche
The distinguished elder. Much of what feels "modern" in bash — $(...), [[ ]], arrays — was ksh first. POSIX's shell standard is largely ksh88 codified.
csh / tcsh
%
C shell · TENEX C shell
- Appeared
- 1978 / 1983
- Creator
- Bill Joy, Berkeley / Ken Greer
- Habitat
- Historically default on BSD; pockets remain in EDA (chip design) tooling and old academic environments
Why it was made
Joy wanted a shell with C-like syntax and, above all, better interactive life: csh invented history (!!), aliases, and job control. tcsh added filename completion and command-line editing.
What it's used for
Mostly maintaining old csh scripts and EDA tool flows that standardized on it decades ago.
Niche
The influential dead end. Its interactive inventions were absorbed by every later shell, but its scripting language is famously broken — the essay "Csh Programming Considered Harmful" is a classic. Learn from it; don't script in it.
zsh
%
Z shell
- Appeared
- 1990
- Creator
- Paul Falstad, Princeton student
- Habitat
- Default on macOS since Catalina (2019); the power user's Linux shell
Why it was made
Falstad wanted one shell with the best of everything — ksh's scripting, csh's comforts — plus its own ideas: recursive globbing (**/*.c), spelling correction, and a completion system that can describe every flag of every command.
What it's used for
Daily interactive driving. Frameworks like Oh My Zsh and themes like Powerlevel10k made it the customization platform of choice.
Niche
The maximalist. Nearly bash-compatible for everyday use, so it's the lowest-friction upgrade for a bash user — your muscle memory transfers, then the extras accumulate.
fish
>
Friendly Interactive SHell
- Appeared
- 2005
- Creator
- Axel Liljencrantz
- Habitat
- Developer laptops; anywhere someone chose their shell deliberately
Why it was made
A protest against configuration. Its motto — "configurability is the root of all evil" — meant building in what others make you set up: autosuggestions from history as you type, syntax highlighting, completions parsed automatically from man pages. All on by default.
What it's used for
Interactive use by people who want a great terminal experience out of the box.
Niche
The heretic. fish deliberately broke POSIX compatibility to get a cleaner language — so bash one-liners from Stack Overflow often won't paste in, and scripts still get written in bash. Its ideas (autosuggestions especially) have been copied everywhere.
PowerShell
PS>
pwsh — the object pipeline
- Appeared
- 2006; cross-platform & open source since 2016
- Creator
- Jeffrey Snover, Microsoft
- Habitat
- Windows administration everywhere; Azure cloud tooling; available on Linux/macOS
Why it was made
Windows had no serious automation story — cmd.exe was a toy, and the OS's state lives in APIs and objects, not text files. Snover's insight: pipe .NET objects between commands instead of text.
What it's used for
Windows and Azure administration, Active Directory, enterprise fleet management.
Niche
The other paradigm. Where Unix pipes text and every tool re-parses it, Get-Process | Where-Object CPU -gt 100 passes structured objects — no awk, no cut. Verbose (Verb-Noun everywhere) but self-documenting. Since you know it: it's the shell that took Unix's pipeline and asked "what if the data had types?"
Nushell
❯
nu — honorable mention, the new wave
- Appeared
- 2019
- Creator
- Jonathan Turner & Andrés Robalino
- Habitat
- Early adopters' terminals; still pre-1.0-era in spirit
Why it was made & its niche
Nushell asks: what if PowerShell's structured-data idea got a Unix-native, Rust-flavored redesign? Everything is a typed table — ls | where size > 1mb | sort-by modified just works, and it reads JSON, CSV, and TOML natively. It's the clearest sign that the structured-pipeline idea is the direction shells are evolving, even if bash's inertia means the text pipeline isn't going anywhere soon.