There are many foot-guns to be found in bash scripting.<p>I highly recommend the Wooledge wiki for any and all bash knowledge, it points every place you can go wrong, especially when using advanced features.<p><a href="https://mywiki.wooledge.org/FullBashGuide" rel="nofollow">https://mywiki.wooledge.org/FullBashGuide</a><p><a href="http://mywiki.wooledge.org/BashFAQ" rel="nofollow">http://mywiki.wooledge.org/BashFAQ</a>
Really great resource. If you want more of a book format, I also highly recommend The Linux Command Line by William Shotts: <a href="https://linuxcommand.org/tlcl.php" rel="nofollow">https://linuxcommand.org/tlcl.php</a>
Mandatory comment every time the subject comes up: <i>shellcheck</i> is really helpful when writing Bash scripts.<p>shellcheck itself is not written in Bash (it's written in Haskell) but it gives really good hints and find lots of bugs. If you disagree with some of its warnings, you can choose which ones you want to turn off.<p>I use it from within Emacs and it works fine. Set that thing once, years ago, and it's been helping me ever since.<p>Also: shellcheck probably ships with your Linux distro.
last update 2014<p>that being said, it think 10 years later, linux should pick a data oriented shell (powershell or nushell) and go full in on it<p>on windows, almost all services have some Powershell support<p>i understand that on linux, command line support is always there, so unlike windows adding command line support is not really news, but still i think the move to a data oriented shell, is better
There are so many things that can go wrong when scripting in the shell. If you don't sit down and play with it, trying to understand what's going on, then no guide will save you.<p><pre><code> : "${foo:=bar}"</code></pre>
I used to read this cover to cover when I first learnt bash. But I later found that its advice can be subpar from time to time. There are better resources in learning bash.