This has never stuck with me, and I hadn’t thought about why until now. I have two reasons why I will always write ${x}_$y.z instead of ${x}_${y}.z:
Syntax highlighting and shellcheck have always caught the cases I need to add braces to prevent $x_ being expanded as ${x_}.
I write a lot of Zsh. In Zsh, braces are optional in way more cases. "$#array[3]" actually prints the length of the third item in array, rather than (Bash:) the number of positional parameters, then the string 'array[3]'.
@zephyr
echo "${HOME}/docs"
This is the best way. It’s also the way the Shellcheck
wantssometimes recommends.@bloopernova As you mention it, here the links for anyone interested: Online tool https://www.shellcheck.net/ and you can install it locally too https://github.com/koalaman/shellcheck .
While this looks like a handy tool, it does make me think shell scripting itself needs a cleaner approach than what we have currently.
deleted by creator
This isn’t true. Shellcheck doesn’t insist on braces unless it thinks you need them.
Oh! I didn’t know that (um, obviously lol)
I’ll edit my comment.
This is the way
I also do this so the variables are more easily spotted.
This has never stuck with me, and I hadn’t thought about why until now. I have two reasons why I will always write
${x}_$y.z
instead of${x}_${y}.z
:$x_
being expanded as${x_}
."$#array[3]"
actually prints the length of the third item inarray
, rather than (Bash:) the number of positional parameters, then the string'array[3]'
.@gamma I just use them out of consistency and principle, so I don’t need to think in which case it is required or not.
This is the right way