Вьющиеся фигурные скобки всегда необходимы для доступа к элементам массива и выполнения расширения фигурных скобок.
Хорошо быть не слишком осторожным и использовать его {}для расширения переменных оболочки, даже если нет места для двусмысленности.
Например:
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
Итак, лучше написать три строки:
path=/var/$dir/$prog
logfile=$path/$prog.log
path_copy=$path
что определенно более читабельно.
Поскольку имя переменной не может начинаться с цифры, оболочка не нуждается {}в пронумерованных переменных (например $1, $2и т. Д.), Если за таким расширением не следует цифра. Это слишком тонко, и это явно позволяет использовать {}в таких контекстах:
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
Видеть:
{}известен как расширение скобки .${}известен как расширение переменной. Они делают разные вещи. Я бы поддержал вас, за исключением бита без расширения.