HACKER Q&A
📣 tschumacher

A Bash guide for Posix shell programmers?


I've been programming POSIX shell for a while and know pretty much all of it (the spec isn't that long: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html). I mostly stayed away from Bash because of the "it runs everywhere" promise of POSIX but recently I've realized that most of the scripts I write will probably always run on machines with Bash installed anyways. I'm looking for a guide that explains Bash features specifically and doesn't go over the whole shell programming basics again. I know some features here and there, e.g. I know that Bash has arrays and a syntax to redirect the contents of a variable to a file, but I'm looking for a comprehensive list of what's possible. Are there any resources you can recommend?


  👤 tschumacher Accepted Answer ✓
It turns out the Bash manual groups the Bash specific features into its own chapter [1] and it's a short read and also there are not nearly as many Bash specific features as I thought.

[1] https://www.gnu.org/software/bash/manual/bash.html#Bash-Feat...


👤 dharmab
The three most important resources I've used:

- https://tldp.org/LDP/abs/html/

- https://mywiki.wooledge.org/BashGuide

- https://www.shellcheck.net/ (can tell you if there's a Bash-specific replacement for a POSIX mechanic)

I'll be reading this book over the break: https://fabiensanglard.net/bash/


👤 runjake
This may not explicitly meet your requirements, but I always find this site handy for quick reference:

https://learnxinyminutes.com/docs/bash/

It helpfully also links to the Bash manual:

https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash....


👤 1vuio0pswjnm7
Bash is slower. That's why a major Linux distribution would switch to NetBSD Almquist sh. On a Linux distribution, generally, bash is always found in the userland. But for scripting (non-interactive use), it's big and slow.

👤 NukedOne
You might find this useful:

https://mywiki.wooledge.org/BashGuide


👤 haltist
Learn Bash the Hard Way by Ian Miell