Disons que nous avons un tableau de BASH avec des entiers:opération arithmétique sur tous les éléments dans le tableau BASH
declare -a arr=(1 2 3)
et je veux faire une opération arithmétique sur chaque élément, par exemple ajouter 1. Y at-il un altenative à une boucle:
for ((i=0 ; i<=${#arr[@]}-1 ; i++)) ; do
arr[$i]=$((${arr[$i]} + 1))
done
J'ai essayé quelques options:
arr=$((${arr[@]} + 1))
échoue, alors que
arr=$(($arr + 1))
résultats dans
echo ${arr[@]}
2 2 3
donc seulement le premier (zeroth) ele ment modifié. J'ai lu environ awk
solutions, mais je voudrais savoir si l'arithmétique BASH supporte de telles opérations par lots sur chaque élément de la matrice.
Je ne pense pas qu'il y ait une alternative. En guise de remarque, aucun des langages de programmation que j'utilise ne le fait nativement. Aussi, vous pouvez simplifier 'arr [$ i] = $ (($ {arr [$ i]} + 1))' à 'arr [$ i] ++' – Aserre
Je ne connais pas vos langues préférées, mais par ex. FORTRAN supporte 'arr (:) = arr (:) + 1' ou' arr3 (:) = arr1 (:) * arr2 (:) ', donc j'avais l'espoir que BASH serait capable. Désolé, je ne peux pas reproduire la chose 'arr [$ i] ++'. Soin d'expliquer? – Fiximan
oublié la parenthèse. la syntaxe correcte est '(($ arr [$ i] ++))' – Aserre