Bash Tutorial · Bash Basics · Lesson 7 of 30

Bash History & Versions

Where the Unix shell came from, how Bash became the default shell of Linux, every major Bash release on one timeline, the Shellshock vulnerability, and which version you're likely to meet today.

Create a free account to save this page, take notes and track your progress. Sign in

How Bash started

The first Unix shell was Ken Thompson's, in 1971. In 1979, Version 7 Unix shipped the Bourne shell (sh), written by Stephen Bourne at Bell Labs: it added the scripting features shells still use, such as variables, if, for, case and here-documents. Other shells followed, including the C shell (1978) and the KornShell (1983).

The GNU Project needed a free shell compatible with sh. Brian Fox wrote it, and the first beta of the Bourne Again SHell, version 0.99, appeared on 8 June 1989. Chet Ramey took over maintenance in the early 1990s and still maintains it. Because Linux distributions are built from GNU tools, Bash became the default shell on almost every Linux system, and later the language of countless build, deployment and CI scripts.

Timeline of major releases

  1. 5.3Current
    • Command substitution without a subshell (${ cmd; }), GLOBSORT, and many fixes
  2. 5.2Supported
    • The version in Ubuntu 24.04 and Debian 12; better compatibility modes and loadable builtins
  3. 5.1Historic
    • SRANDOM, wait -p, and Readline improvements
  4. 5.0Historic
    • EPOCHSECONDS, EPOCHREALTIME and BASH_ARGV0
  5. 4.4Historic
    • ${var@Q} and other transformation operators
  6. 4.0Historic
    • Associative arrays, ** globstar, coproc and |&
  7. 3.2Historic
    • The last version under GPLv2, which is why macOS still ships it
  8. 3.0Historic
    • Regular-expression matching with [[ =~ ]]
  9. 2.0Historic
    • Arrays and many new expansions
  10. 1.0 betaHistoric
    • Brian Fox releases the first public beta (0.99)

Turning points

  • POSIX (1992): the POSIX shell standard defined a portable sh; Bash implements it plus its own extensions. Scripts with #!/bin/sh should only use POSIX features, since /bin/sh is Dash on Debian and Ubuntu.
  • Shellshock (September 2014): CVE-2014-6271 let attackers run commands through crafted environment variables, exposing web servers that passed request data to Bash (CGI). It was patched within days and made "keep your shell updated" an operations lesson.
  • macOS switches to zsh (2019): macOS Catalina made zsh the default shell; the bundled Bash stays at 3.2 for licensing reasons, so install a current Bash with Homebrew if you need Bash 4+ features.
  • Containers and CI (2010s): Dockerfiles and CI pipelines made shell scripting a daily skill for most developers.

Which version should I use?

Use what your distribution ships (Bash 5.x on current Linux). If scripts must also run on macOS's Bash 3.2, avoid associative arrays and other 4.0+ features, or require a newer Bash explicitly.

Further reading: Bash home page · Bash release archive · Bash NEWS

Last reviewed 21 October 2026. Release and support dates come from the official release pages linked above.

Was this page helpful?