between shell, bash and others

Thursday January 27th 2022 by SocraticDev

Any computerized system is a complex structure based on several layers of software protocols and hardware elements. The OSI model starts from the physical layer, electrical impulses to end on the application layer. For ordinary mortals, the application layer is an attractive user interface (UI for user interface): a web or mobile application.

Usually, for developers, the application layer presents itself as functionalities made available via textual commands typed on a keyboard and viewed on a terminal.

another analogy

The linux model is based on a kernel, a software kernel orchestrating the interactions between software and hardware. The outer layer, the software shell, is called in English shell. In the Unix/Unix-like world, the computer scientist accesses the power of the system through a software shell like shell, bash or zsh.

"The term 'shell' originates from terminology used with early Unix-like operating systems where it had the more specific meaning to designate the highest layer of Unix system interfaces, as opposed to the low-level layer, called the kernel.

The first American computer designers used to describe the different software layers of a system by an analogy: that of the kernel and the nutshell.

The word "kernel" refers to the edible part of the nut. This is the part enclosed in the shell. The hull being the inedible part of the fruit, called "shell" in English. The underlying idea being that "to access the edible (useful) part, you have to go through the shell".


POSIX is an acronym for Portable Operating System Interface. A technical standard defined in 1988 by the IEEE (Institute of Electrical and Electronics Engineers). It is a set of standards prescribed to ensure the interoperability of different computerized systems. Input and output services (IO), user interfaces (Bourne shell) as well as utility commands like awk and echo are characterized.

This standard dating from the late 1980s ensures compatibility between different operating systems. For example, Microsoft Windows NT 3.0, 4.0 are POSIX certified.

However, the standard is not perfect. Some bugs remain and several innovations are not supported. Therefore, not being 'POSIX compliant' is not a defect in itself.

sh or Bourne Shell

sh or Bourne shell is a command programming language following the POSIX standard. Its advantage is compatibility with different systems. This language uses the syntax and semantics of older programming languages; mostly ALGOL68.

A sh script will therefore run smoothly on a bash running system. It is the most portable scripting language. We are sure that it can be executed on any POSIX, UNIX and UNIX-like system.

bash or Bourne Again Shell

bash or Bourne Again Shell is a programming language that takes some features of sh while enriching it. This is the default shell of most GNU/Linux distributions. It is not POSIX certified but still conforms to some standards like IEEE POSIX Shell and Tools.

bash is still very portable within the GNU/Linux ecosystem. It is found in the same place on almost all our systems: /bin/bash.

One may prefer bash for its richness of features in terms of programming and interactive use.

bash vs. sh

bash sh
Bourne Again SHell SHell
developed by Brain Fox développé par Stephen R. Bourne
successor to sh prédécesseur de bash
more features less features
is not POSIX compliant is POSIX compliant
easy to use more difficult to use than bash
less portable than sh more portable than bash
bash scripting is specific to bash environment sh scripting targets all shells
implements history command does not implement history command

zsh and others delusions

Z shell or zsh is the default software shell on the MacOS operating system. Many GNU/linux users also like to use this shell because of its functionality and pleasing aesthetics.

The first version of zsh was written by Paul Falstad in 1990, while a student at Princeton University. The name "zsh" comes from Zhong Shao, a Yale professor and teaching assistant at Princeton University. Paul Falstad thought that Shao's login identifier, "zsh", was a suitable name for a shell.

(from wikipedia)

In particular, zsh provides the following features:

  • Completion of commands, options and arguments of most commands. In particular, typing the sequence of characters “cd ” will only allow completion by directories.
  • Very advanced "Globbing" or "Expansion [archive]" functions
  • Sharing command history between all currently active zsh shells.
  • Improved use of variables and arrays.
  • Editing of multi-line commands in a single buffer.
  • "Spelling" correction of typed commands.
  • Several compatibility modes (zsh can for example be seen as a bourne shell when executed as /bin/sh).
  • Customizable command prompt, with the ability to display information on the right side of the screen that disappears if the command typed is too long.
  • zsh supports Unicode since version 4.32 and is more flexible and lightweight than bash[ref. necessary], in particular thanks to a division of the code into dynamically loadable modules.

translated from french by google translate