Geschweifte Klammern werden immer benötigt, um auf Array-Elemente zuzugreifen und eine Klammererweiterung durchzuführen.
Es ist gut, nicht übervorsichtig zu sein und die {}
für die Shell-Variablenexpansion, auch wenn es keinen Spielraum für Mehrdeutigkeit gibt.
Zum Beispiel:
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
Es ist also besser, die drei Zeilen wie folgt zu schreiben:
path=/var/$dir/$prog
logfile=$path/$prog.log
path_copy=$path
die eindeutig besser lesbar ist.
Da ein Variablenname nicht mit einer Ziffer beginnen kann, braucht die Shell keine {}
um nummerierte Variablen (wie $1
, $2
usw.), es sei denn, auf diese Erweiterung folgt eine Ziffer. Das ist zu spitzfindig, und es ist notwendig, explizit {}
in solchen Kontexten:
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
Siehe: