Скажут, у нас есть массив BASH с целыми числами:Арифметические операции на все элементы в массиве BASH
declare -a arr=(1 2 3)
, и я хочу сделать арифметическую операцию на каждый элемент, например, добавить 1. Есть ли к заселение вместо себя иного цикл:
for ((i=0 ; i<=${#arr[@]}-1 ; i++)) ; do
arr[$i]=$((${arr[$i]} + 1))
done
Я попробовал несколько вариантов:
arr=$((${arr[@]} + 1))
терпит неудачу, в то время как
arr=$(($arr + 1))
приводит
echo ${arr[@]}
2 2 3
Таким образом, только первый (нулевой) элемент изменен.
Я читал о решениях awk
, но хотел бы знать, поддерживает ли BASH-арифметику такие пакетные операции для каждого элемента массива.
Я не думаю, что есть альтернатива. Как замечание, ни один из языков программирования, которые я использую, не может сделать это изначально. Кроме того, вы можете упростить 'arr [$ i] = $ (($ {arr [$ i]} + 1))' to 'arr [$ i] ++' – Aserre
Я не знаю о ваших предпочтительных языках, но, например, FORTRAN поддерживает 'arr (:) = arr (:) + 1' или' arr3 (:) = arr1 (:) * arr2 (:) ', поэтому у меня была надежда, что BASH будет способен. Извините, я не могу воспроизвести 'arr [$ i] ++' вещь. Позаботьтесь об этом? – Fiximan
забыли скобки. Правильный синтаксис - '(($ arr [$ i] ++))' – Aserre