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:
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]'.
@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.
I will always write ${x}_$y.z instead of ${x}_${y}.z:
The difference between the two seems different to what's in the OP. Is there a typo here?
@ilegadh You don't need cat in cases when grep "d" alphabet.txt can read from file too. Edit: But obviously your comment was more of a joke to over complicate it. So never mind then.
To be safe, should probably output grep to a file, then cat that.
What should I search to better understand what is written here? Don't mind learning myself, just looking for the correct keywords. Thanks!
Read the Bash manual. That one patter on the GP is called "Command Substitution", you can search for it.
This comment is a joke and you wouldn't want to do it like that in reality, but here are some related keywords you could look up: "Unix cat", "Unix pipeline", "grep", "output redirection", "command substitution".
First one, then the other, then I forget the quotes, then I put them in single quotes by accident, then I utilize that "default value" colon syntax in case I'm missing HOME , then I just stick to ~ for the rest of the file.
Typically find "$HOME/docs", but with a few caveats:
In Zsh or Fish, the quotes are unnecessary: find $HOME/docs
@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 .
This isn't true. Shellcheck doesn't insist on braces unless it thinks you need them.
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?