On Mon, Aug 12, 2019 at 01:56:46PM -0400, Lee wrote: > What's the difference between ${d} and "${d}"? Or is that a bashism > also? (all my scripts use /bin/sh so I'm pretty clueless wrt bash)
This applies to both sh and bash. An unquoted substitution, like $d or ${d}, undergoes several steps. The first step is actually copying the contents of the variable. After that comes word splitting (dividing the content into words/fields using IFS), and then pathname expansion ("globbing"). I have a helper script called "args" which I use to illustrate this stuff. wooledg:~$ cat bin/args #!/bin/sh printf "%d args:" "$#" printf " <%s>" "$@" echo Using that, we can demonstrate: wooledg:~$ d="a variable" wooledg:~$ args "$d" 1 args: <a variable> wooledg:~$ args $d 2 args: <a> <variable> The curly braces don't matter in this case, because there's nothing after the $d for it to matter. wooledg:~$ args ${d} 2 args: <a> <variable> The curly braces are only needed because of the _stuff after the d. Without them, d_stuff is treated as a variable name. wooledg:~$ args "$d_stuff" 1 args: <> wooledg:~$ args "${d}_stuff" 1 args: <a variable_stuff> The quotes are still needed. Without them, we still get word splitting and pathname expansion. wooledg:~$ args ${d}_stuff 2 args: <a> <variable_stuff> For more details, see <https://mywiki.wooledge.org/Quotes>.