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]'.
@ilega_dh 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.
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.