Warning: Some posts on this platform may contain adult material intended for mature audiences only. Viewer discretion is advised. By clicking ‘Continue’, you confirm that you are 18 years or older and consent to viewing explicit content.
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]'.
My reply is to a commenter who said they prefer "${HOME}/docs" over both options in the original image ("$HOME/docs" or "$HOME"/docs). Many people prefer to always include braces around the parameter name out of consistency, instead of only when they are required.
My comment explained why my habit is to only include braces when they are necessary.
@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 is the right way
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.
The difference between the two seems different to what’s in the OP. Is there a typo here?
My reply is to a commenter who said they prefer
"${HOME}/docs"
over both options in the original image ("$HOME/docs"
or"$HOME"/docs
). Many people prefer to always include braces around the parameter name out of consistency, instead of only when they are required.My comment explained why my habit is to only include braces when they are necessary.