What is BaSH?

Often written as "Bash" or "BASH"), BaSH is an acronym for "Bourne Again SHell." BaSH is a UNIX shell programming language interpreter that comes preinstalled with many UNIX and Linux based operating systems, including Ubuntu.

Why use BaSH?

BASH is free software (subject to the GPLv3 terms and conditions), and is the de-facto shell (command language interpreter) scripting language used in the GNU operating system. BaSH is Turing Complete, meaning it is computationally universal. In layman's terms this means given enough time and resources it can complete any computation.


BaSH offers functional improvements over sh for both programming and interactive use. Most sh scripts can be run by BaSH without modification. BaSH almost always appears at the top of opinion polls when developers are asked what is their favorite shell. In many regards, shells are the anti-thesis of modern-day programming. They are old, rarely updated, and have a sense of ubiquity that very few other languages can touch. They are a staple of everyday computing needs (particularly in the Dev Ops world), and have been since their invention in the late 1970's/early 1980's.

POSIX Compliance

There often seems to be confusion regarding whether or not BaSH is POSIX compliant. Many industry veterans consider POSIX to be a pipe-dream, and therefore the emphasis on whether or not it is important for software to be "POSIX-compliant" is controversial. For the uninitiated, POSIX (Portable Operating System Interface) is a movement to create a single, unified UNIX operating system. The UNIX environment is rife with slightly different iterations of very similar software (such as Shells). The end result is not all UNIX software is compatible with all UNIX-based devices. POSIX seeks to eliminate this compatibility problem by holding all participants to a set of standards designed to ensure interoperability of operating system software across different hardware platforms. 

BaSH is not POSIX compliant in its native state. However, it can be made POSIX compliant via a command switch (--posix or ‘set -o posix’).

Brief History

BaSH is an old language. Originally crafted by Brian Fox for the GNU project, BaSH version .99 was released in June, 1989 as an operating-system level language. It has withstood the test of time. An sh-compatible shell, BaSH incorporates features derived from two older shells: KornShell (ksh; developed by David Korn of Bell Labs in 1983) and C-shell (csh; created by Bill Joy [co-founder of Sun Microsystems] in the late 1970's).

BaSH Versions

When discussing compatibility, BaSH is generally grouped into its major revision numbers, which are currently BASH 2, 3, and 4. However, unbeknownst to many programmers, Bash 5 was released in January 2019, though it will likely take some time for it to trickle down into every UNIX based distribution. The fact that many people have no idea that BaSH 5 exists is a testimony to its flexibility and longevity. Bash 5 consists largely of bug fixes to Bash 4.4; many of them esoteric in nature. I would wager it's very likely most users will have no need to upgrade to version 5 for some time, and until they do they are likely to continue using whichever variant they are accustomed to. After all, there are still people using Bash 2 (circa 1996) and Bash 4 is most common, which has been around since 2009.

Z-SHell: BaSH on Steroids?

Alas, BaSH is beginning to show its age a bit. Z-SHell (zsh), another stalwart - this one dating back to 1990 - can be thought of as an enhanced version of BaSH. The primary benefits of using Z-Shell versus BaSH center around convenience features, such as its ability to offer suggestions to commands as they are being typed in, similar to the auto-complete function found in smart-phone software today.



Bourne shell. (12 December 2018). Wikipedia. Wikipedia Foundation.

GNU Bash. (15 December 2017). Free Software Foundation.

POSIX. Wikipedia. (25 June 2019). Wikipedia Foundation.

Turing Completeness. (15 June 2019). Wikipedia.