Las llaves se necesitan siempre para acceder a los elementos de la matriz y llevar a cabo la expansión de llaves.
Es bueno no ser demasiado cauteloso y usarlo {}
para la expansión variable de shell incluso cuando no hay margen para la ambigüedad.
Por ejemplo:
dir=log
prog=foo
path=/var/${dir}/${prog} # excessive use of {}, not needed since / can't be a part of a shell variable name
logfile=${path}/${prog}.log # same as above, . can't be a part of a shell variable name
path_copy=${path} # {} is totally unnecessary
archive=${logfile}_arch # {} is needed since _ can be a part of shell variable name
Por lo tanto, es mejor escribir las tres líneas como:
path=/var/$dir/$prog
logfile=$path/$prog.log
path_copy=$path
que definitivamente es más legible.
Como un nombre de variable no puede comenzar con un dígito, el shell no necesita {}
alrededor de variables numeradas (como $1
, $2
etc.) a menos que dicha expansión sea seguida por un dígito. Eso es demasiado sutil y hace que se use explícitamente {}
en tales contextos:
set app # set $1 to app
fruit=$1le # sets fruit to apple, but confusing
fruit=${1}le # sets fruit to apple, makes the intention clear
Ver:
{}
se conoce como expansión de llaves .${}
se conoce como expansión variable. Ellos hacen cosas diferentes. Te votaré a excepción del bit de no expansión.