Ask HN: A Bash guide for Posix shell programmers?

19 points by tschumacher ↗ HN
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?

10 comments

[ 0.28 ms ] story [ 22.6 ms ] thread
Learn Bash the Hard Way by Ian Miell
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.
If i'm writing shell scripts i'm not caring about speed anyway.

The "slowness" of bash versus some other shell is likely irrelevant, most of the time will be spent forking and executing other binaries anyway.

What if the people administering Debian project are writing shell scripts. Why do they use Dash instead of Bash. Who cares, right.

The speed difference is substantial. It's noticeable. This is indisputable. I would never use Bash for scripting when faster alternatives are available. But who cares, right.

The fact that Bash is big and slow is independent of what any HN commenter chooses to do or not do. It is a fact indepedent of any decision a particular script author chooses to make.

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/