Você está correto em suas suposições.
A documentação mais detalhada está escondida em info bash :
3.5.3 Shell Parameter Expansion
[...]
The basic form of parameter expansion is
${PARAMETER}. The value ofPARAMETERis substituted. ThePARAMETERis a shell parameter as described above (*note Shell Parameters::) or an array reference (*note Arrays::). The braces are required whenPARAMETERis a positional parameter with more than one digit, or whenPARAMETERis followed by a character that is not to be interpreted as part of its name.If the first character of
PARAMETERis an exclamation point (!), andPARAMETERis not a NAMEREF, it introduces a level of variable indirection. Bash uses the value of the variable formed from the rest ofPARAMETERas the name of the variable; this variable is then expanded and that value is used in the rest of the substitution, rather than the value ofPARAMETERitself. This is known as 'indirect expansion'. IfPARAMETERis a nameref, this expands to the name of the variable referenced byPARAMETERinstead of performing the complete indirect expansion. The exceptions to this are the expansions of${!PREFIX*}and${!NAME[@]}described below. The exclamation point must immediately follow the left brace in order to introduce indirection.