- Avoid paths with spaces :)
- If you have to handle paths with spaces, use double quotes everywhere,
e.g. "$pidfile".
- Always use "$@". I've never found a reason to use $@ or $* unquoted.
I also write unit tests (in shell) if there is something unusual I know I have to handle.
That's it. I don't think it's hard at all, although you will certainly see scripts in the wild where the author was confused about quoting, and quoting hacks pile upon hacks. If you use a consistent style, it's very smiple.
There is a learning curve like there is with any language, but it's totally worth it. Shell is an extremely powerful language, and saves you MANY lines of Python code.
I would say Python is definitely the easiest language to learn, but bash is not harder than say JavaScript.
> I'm not entirely sure why variable expansion works inside double quotes but wildcard expansion doesn’t.
That's because a double-quoted expression is supposed to evaluate to a single word. Wildcard expansion can result in multiple words, but parameter expansion doesn't.
(Except for things like "$@". With bash, the rules always have exceptions.)
To be honest, I trust myself more manipulating paths in a language like Python than to put all quotes in the correct places in Bash :(