← Blog··Updated 7 Jul 2026·5 min read

What does bash stand for? A pun, a dead shell, and a login name

The default shell of the Linux world is a forty-year-old joke about a man named Bourne. The rest of the shell family tree is no more serious: one shell is named after a teaching assistant's login, one after a fish, and two of them are both called sh.

AI-assisted postDrafted with help from Claude, edited and fact-checked by Mart. See transparency policy →
Stephen Bourne speaking at a podium at SD West 2005

Stephen Bourne, whose 1979 shell got him immortalized in a pun he never asked for. Photo by Dmitry Azovtsev, CC BY-SA 3.0.

The shell that opens when you launch a terminal on most Linux machines is named after a pun. Bash stands for Bourne-Again SHell — a joke at the expense of Stephen Bourne, whose sh was the standard Unix shell bash was written to replace. The name works twice: bash is Bourne's shell born again as free software1, with the evangelical-revival pun fully intended. Nearly every name in the shell family tree is this kind of joke, which is worth knowing the next time someone treats the terminal as a solemn place.

🔗 Learn more1 Free vs open source: 'free as in freedom', not 'free as in beer'

Who was Bourne, and why is bash him again?

Stephen Bourne wrote the Bourne shell, sh, at Bell Labs; it shipped with Version 7 Unix in 1979 and became the Unix shell — the one scripts assumed, the one #!/bin/sh still points at in spirit. But it was proprietary, like the rest of Unix, and when the GNU project set out to build a complete free operating system, a shell was non-negotiable infrastructure.

So in 1988 the Free Software Foundation put a programmer named Brian Fox on it, and on June 8, 1989 bash 0.99 was released: a free shell that could run Bourne-shell scripts unmodified, with features borrowed from the C shell and the Korn shell folded in. Chet Ramey took over maintenance in the early 1990s and — in the pattern this lane keeps finding, from sudo's Todd Miller onward — still maintains it today, three and a half decades later. When Linux appeared in 1991 needing a shell, the free, Bourne-compatible one was sitting there ready. The pun became the default interface to a hundred million machines.

Bournegol: the shell written in fake ALGOL

Bourne's own code deserves a detour, because the man being punned on was a character. Bourne came to Bell Labs from the ALGOL 68 world and did not intend to let C cramp his style: he famously wrote his shell in C disguised as ALGOL, using a header of macros that redefined the language — IF, THEN, ELSE, FI, BEGIN, END — so that the source reads like ALGOL with C underneath. Unix hackers referred to the dialect as "Bournegol," and maintaining it became legend; later engineers de-ALGOLized the code just to be able to work on it. There is something fitting in the lineage: the shell whose scripts would torment decades of programmers with fi and esac — ALGOL-style reversed keywords that survive in shell syntax to this day — was itself written by a man bending one language into the shape of another. Every time you close an if-block with fi, you are typing a fossil of Stephen Bourne's homesickness for ALGOL 68.

The whole family tree is jokes

Shell naming is a genre of its own, and almost none of it is engineering:

Shell Name logic
sh (Thompson, 1971) just shell
sh (Bourne, 1979) also just shell — a different program with the same name, which is very Unix
csh C shell — its syntax imitates C; also a homophone of sea shell
ksh David Korn's shell. The rare honest one
bash (1989) Bourne-Again SHell — the pun in question
zsh (1990) named after Zhong Shao, a teaching assistant at Princeton, because author Paul Falstad thought Shao's login, zsh, was a good name for a shell
fish (2005) Friendly Interactive SHell, and yes, also the sea-creature joke again

The zsh story deserves a beat of appreciation: the default shell of every Mac since Catalina is named after a grad student's username. Not his work, not his initials-as-tribute — his login string, admired aesthetically by a fellow student in 1990. Somewhere between that and Maxwell's demon naming your background processes, the lesson is that Unix vocabulary is archaeology of jokes that shipped.

Shellshock: the day the pun stopped being funny

For twenty-five years bash's ubiquity was a quiet fact. In September 2014 it became a threat model. Shellshock (CVE-2014-6271 and friends) was a bug in how bash parsed function definitions passed through environment variables — craft a malicious variable, and bash would execute arbitrary commands the moment it started. The flaw had been sitting in the code since roughly 1992, undetected for about twenty-two years. What turned an obscure parsing quirk into a global emergency was the pun's own success: bash was everywhere — behind CGI web servers, DHCP clients, SSH restricted shells — and in many of those places, attacker-controlled data landed in environment variables, which meant the entire internet was, briefly, a bash prompt. Exploitation began within hours of disclosure; patches shipped within days; scanning for vulnerable servers continued for years.

Shellshock is the dark side of every theme in this series: a tool so default that nobody sees it anymore, maintained for decades by essentially one person (Chet Ramey patched it, as he patches everything), carrying thirty-year-old code into contexts its authors never imagined. The xz-style single-maintainer worry is not hypothetical in shell-land — it already happened, benignly, in 2014: the world's infrastructure depended on how fast one man in Cleveland could fix a parser.

Why your Mac dumped bash

If you opened a terminal on a Mac after 2019 and found zsh prompting instead of bash, you witnessed a licensing decision, not a technical one. Bash moved to GPLv3 with version 4.0 in 2009; GPLv3's patent and anti-lockdown clauses are unacceptable to Apple as a matter of policy. So Apple simply froze: macOS shipped bash 3.2 — a 2007 release — for twelve years, the software equivalent of keeping a flip phone in the drawer because the new contract has fine print. With Catalina (2019), Apple swapped the default to MIT-ish-licensed zsh and stopped pretending. Which produced the funniest outcome available: the shell named for being born again as free software was abandoned by the world's largest company because of how free its license became — and its replacement, as covered above, is named after a teaching assistant's login.

Linux distributions took a different door out of the same room: Debian and Ubuntu point /bin/sh not at bash but at dash, a minimal POSIX shell that starts faster — so on those systems, boot scripts run dash, users run bash, and every #!/bin/sh script containing a bashism explodes on schedule. Three shells deep, all called or pretending to be sh, all because of a pun from 1989 and a license from 2007.

Does the name matter?

It did once, legally and politically: Bourne-Again announced what bash was — a clean-room reimplementation, compatible but free — in the same breath as the joke. The GNU project needed the world to know both things, and the name carried the whole message in four letters. That is good naming, the same trick as grep compressing its entire lineage into its letters.

And, as everywhere in this lane, the name has outlived its own war. The proprietary sh bash was reacting against is a museum piece; bash's rivals today are its own descendants (zsh, fish) rather than anything from Bell Labs. The pun remains, decades after the man it teased retired, typed billions of times a day by people who have never heard of Stephen Bourne — which is, if you think about it, the most born again thing about it: the name outlived the body entirely. Your terminal's name is a fossil too, and so is the prompt inside it.

bash: Bourne-Again SHell — a pun on Stephen Bourne's 1979 sh, written by Brian Fox for the GNU project, released June 8, 1989, maintained by Chet Ramey since the early 1990s. The rest of the shell family: a C joke, a fish joke, and a TA's login.

Read next