Motivation

bash is a nice scripting language (especially considering its age). Close integration of interpreters with operating systems and a ton of available binaries on these systems (e.g., awk, sed, jq) make it a great choice for quick and concise scripting. In recent years, some of the scripting has moved over to Python (and a few other languages) due to availability of (standard) libraries and testing support. However, seeing import subprocess; subprocess.run([“ls”, “-l”]) or similar code in Python, and then using replacements for awk, sed, grep, git commands (and awkwardly processing their outputs) never looks very exciting.

Key motivation points:

  • Provide a “standard” library for bash

  • Provide missing language features (but do not design new language or change interpreters)

  • Enable using the same set of functions across various operating systems

  • Enable using different interpreters (and their versions) by hiding details behind APIs

Finally, in recent years, we had a feeling that programming in bash can be similar to programming in Go (e.g., an easy way to run things in parallel ()& vs. go, dealing with errors via exit codes, keeping API naming alike). Definitely not saying you should program in gobash instead of Go, but if you do end up writing a few lines in bash then they could look similar or give a similar feel like those you write in Go.