Соответствующий раздел человек
:
В контексте, где оператор присваивания присваивает значение
переменная оболочки или индекс массива, оператор += может использоваться для добавления к
или добавить к предыдущему значению переменной. Сюда входят аргументы
встроенные команды, такие как declare, которые принимают операторы присваивания
(команды объявления). Когда += применяется к переменной, для которой
задан целочисленный атрибут, значение оценивается как арифметическое exâ
нажатием и добавляется к текущему значению переменной, которое также является eval.
уед. Когда += применяется к переменной массива с помощью составного присваивания.
(см. Массивы ниже), значение переменной не сбрасывается (как это
при использовании =), и новые значения добавляются к массиву, начиная с
на единицу больше максимального индекса массива (для индексированных массивов) или
добавляются как дополнительные пары ключ-значение в ассоциативный массив. Когда ап
сопоставляется со строковой переменной, значение расширяется и добавляется к
значение переменной.
Поскольку вы не установили целочисленный атрибут для а
, а+=$б
будет выполнять конкатенация строк вместо арифметического сложения:
$а=1; б=2; а+=$б; эхо "$а"
12
тогда как
$ сбросить а б
$ объявить -я=1; б=2; а+=$б; эхо "$а"
3
Кроме того, вы можете принудительно выполнить арифметическую оценку, используя (( ... ))
$ сбросить а б
$а=1; б=2; ((а+=$b)); эхо "$а"
3
(Обратите внимание, что ((а+=б))
также работает; в $
нет необходимости разыменовывать переменные в арифметическом контексте).