Les accolades sont toujours nécessaires pour accéder aux éléments du tableau et effectuer l'expansion des accolades.
Il est bon de ne pas être trop prudent et d'utiliser {}
pour l'expansion des variables de l'interpréteur de commandes, même lorsqu'il n'y a pas de place pour l'ambiguïté.
Par exemple :
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
Il est donc préférable d'écrire les trois lignes comme suit :
path=/var/$dir/$prog
logfile=$path/$prog.log
path_copy=$path
qui est définitivement plus lisible.
Puisque le nom d'une variable ne peut pas commencer par un chiffre, le shell n'a pas besoin de {}
autour des variables numérotées (comme $1
, $2
etc.), sauf si cette expansion est suivie d'un chiffre. C'est trop subtil et cela oblige à utiliser explicitement {}
dans de tels contextes :
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
Voir :