Citação
É sempre melhor citar as expansões de parâmetro quando quiser manter o valor expandido não dividido em várias palavras e afetado pelo valor do IFS. Por exemplo:
$ IFS=" elr"
$ var="Hello World"
$ printf '<%s> ' $var; echo
<H> <> <> <o> <Wo> <> <d>
$ printf '<%s> ' "$var"; echo
<Hello World>
No entanto, há algumas instâncias muito limitadas que exigem uma expansão sem aspas para que a divisão seja realmente concluída:
$ IFS=$' \t\n'
$ var="one two three"
$ array=($var)
$ declare -p array
declare -a array=([0]="one" [1]="two" [2]="three")
Links sobre o assunto:
Quando é necessário citar duaspas?
Gilles
Stéphane Chazelas
Aparelho
As chaves são sempre necessárias quando os caracteres após o nome da variável não devem ser unidos a esse nome de variável:
$ var=one
$ echo "The value of var is $varvalue"
The value of var is
$ echo "The value of var is ${var}value"
The value of var is onevalue
De LESS="+/which is not to be interpreted as part" man bash
${parameter}
The braces are required … when parameter is followed by a character which is not to be interpreted as part of its name.
Adicionalmente; chaves são necessárias quando se lida com qualquer parâmetro posicional de dois dígitos.
$ set -- one two t33 f44 f55 s66 s77 e88 n99 t10 e11 t12
$ echo "$11 ${11} $12 ${12}"
one1 e11 one2 t12
Leia o manual: LESS="+/enclosed in braces" man bash
When a positional parameter consisting of more than a single digit is expanded, it must be enclosed in braces
ou LESS="+/with more than one digit" man bash
${parameter}
The value of parameter is substituted. The braces are required when parameter is a positional parameter with more than one digit, …
Citações vs chaves
when shall we use double quote around parameter expansion instead of braces around parameter name? When the other way around? When does either of the two work?
Não há regra para "deve" apenas a possibilidade de usar:
$ var=One
$ echo "ThisIs${var}Var"
ThisIsOneVar
$ echo "ThisIs""$var""Var"
ThisIsOneVar
$ echo 'ThisIs'"$var"'Var'
ThisIsOneVar
$ echo 'ThisIs'"${var}"'Var'
ThisIsOneVar
Todas as expansões são totalmente equivalentes, use qualquer uma que você goste mais.