Ask HN: 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?
10 comments
[ 0.28 ms ] story [ 22.6 ms ] thread[1] https://www.gnu.org/software/bash/manual/bash.html#Bash-Feat...
The "slowness" of bash versus some other shell is likely irrelevant, most of the time will be spent forking and executing other binaries anyway.
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.
https://mywiki.wooledge.org/BashGuide
- 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/
if [ $? -ne 0 ]; then
Will get flagged and an improvement will be suggested with an explanation on why [2]
[1] https://marketplace.visualstudio.com/items?itemName=timonwon...
[2] https://www.shellcheck.net/wiki/SC2181
https://learnxinyminutes.com/docs/bash/
It helpfully also links to the Bash manual:
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash....