BASH Programming

What is the difference between #!/bin/sh and #!/bin/bash?

For most of the people who use computers, typing in commands into the command prompt of their respective operating systems is nothing new. Although modern computers commonly interact with using the GUI, there is the provision of using executable and typeable commands with their command terminals.

This is especially true for the users of Linux and its distros. Using the command terminal for performing regular tasks is pretty common.

The programs working behind the scenes of the command terminal are called “shells”. Shells are defined as programs that take in commands, interpret them, and then instruct the computer to perform the function the user wants it to do. So, everything you code into is part of a shell.

In Linux, users use the programming language called “sh” to code into the shell. “Sh” is also known as “Bourne Shell,” It was developed to be used with UNIX systems defined using the POSIX standards.

“Bash” is similarly a shell programming language. It is also known as “Bourne Again Shell”. Today, Bash is the default programming language for the shells in Linux. Bash has the same abilities as Shell, but it developed other functions and better extensions over time.

If you are a Linux user and you want to know the difference between Shell and Bash, you have come to the right place as we will be going deep and describing the differences between the two shell programming languages.


Till now, we have established that “sh” is called “Shell,” and it is a shell programming language for UNIX-based systems. We also said that it follows the POSIX standards. POSIX standards were developed by IEEE to make different operating systems compatible. Thus, POSIX standards ensure that anything developed using shell can be used in other operating systems as well.

The shell can be better described as a specification, not an implementation. An implementation can be described as a complete programming language with its own separate compilers, such as C and C++.

Shell is not like the traditional programming language. Thus, it can’t be called an implementation. Shell describes the syntax and the semantics to be used to program in the Linux shell in detail.

For different operating systems, the shell can be linked with different implementations. For example, Shell has the “dash” implementation in Linux, the “Z shell” for Mac, and “ash” for OpenWRT.


Bash can be called an implementation of Shell developed for the GNU project. As mentioned before, it includes all the shell features, but it developed better extensions. Hence, it can also be called a superset of Shell, including ideas drawn from other shells such as the C shell.

Bash can be used for both scripting and implementation. In the implementing mode, bash takes the form of the command terminal of today’s Linux. For Ubuntu, the scripting shell is dash, and the default terminal is bash.

As it is a superset, all features of Bash are not supported by other shells. Bash can execute most of the tasks carried out by other shells, but it is not true for the opposite. Other shells have limitations, and they don’t have many features provided by Bash.

Some of the features that are Bash exclusive are as follows.

  • Process substitution
  • Scoping variables
  • Arrays
  • Bash supports many special variables such as $RANDOM, $SECONDS, etc.

Advantages of Using Shell

Shell scripting is done using all types of shells out there. As Bash is the most common and most used, there are obvious advantages of bash over shell. But, there is a big advantage when using Shell over Bash, which is portability.

As shell follows the POSIX standards, a script written in Shell can be used in every Linux system without any problems. The same can’t be said for Bash. As Bash added better extensions and features, it slowly went away from the POSIX standards, thus affecting its portability.

Advantages of Using Bash

As mentioned before, Bash has more advanced features than Shell. Having more advanced features just makes Bash more usable and effective in its functioning. That is why Bash is more commonly used as compared to Shell.

A big advantage of Bash is that it can easily be debugged as compared to Shell. Finding errors and fixing scripts in Shell are considerably harder than finding errors in a script written in Bash.

We mentioned that Bash strayed away from the POSIX standards. But, if a user wants to make Bash more POSIX supportive, Bash offers a POSIX switch feature. It can be enabled by typing the following command.

$ bash --posix


This article discussed what shells are and the languages users can use to write shell scripts. The two major languages that came forward were Shell and Bash. We deeply described both of them so we could explain the differences properly. Bash is the newer and improved version of Shell and thus gets our vote as the better shell language. The features offered and the advantages of Bash over Shell are very heavy. Thus, choosing Bash over Shell to write our Shell scripts is easy.

We hope that we can explain the differences clearly and that you now know what you’re dealing with when using either Shell or Bash. We also hope that we chose between Shell and Bash easier for you.

About the author

Zeeman Memon

Hi there! I'm a Software Engineer who loves to write about tech. You can reach out to me on LinkedIn.