Dans une boucle sur un tableau, ajoutez un élément au tableau


9

J'ai un problème avec la boucle for dans bash. Par exemple: j'ai un tableau ("etc" "bin" "var"). Et j'itère sur ce tableau. Mais dans la boucle, j'aimerais ajouter une valeur au tableau. Par exemple

array=("etc" "bin" "var")
for i in "${array[@]}"
do
echo $i
done

Cela s'affiche etc bin var(bien sûr sur des lignes distinctes). Et si j'ajoute après docomme ça:

array=("etc" "bin" "var")
for i in "${array[@]}"
do
array+=("sbin")
echo $i
done

Je veux: etc bin var sbin(bien sûr sur des lignes distinctes).

Ça ne marche pas. Comment puis-je le faire?


1
Modifier la chose que vous répétez est toujours une proposition risquée. C'est souvent le bon moment pour prendre du recul et voir s'il y a une autre approche qui pourrait avoir du sens
Eric Renouf

Réponses:


6

Il va ajouter « sbin » 3 fois comme il se doit, mais il ne sera pas sur la nouvelle itérer ajoutée « sbin » s dans la même boucle.

Après le 2ème exemple:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin

Oui, c'est vrai, mais j'ai besoin d'ajouter à la même boucle :)
damekr

Utilisez ensuite deux forboucles. Effectuez d'abord vos ajouts, puis parcourez le résultat.
PSkocik

1
Je ne vois pas pourquoi vous voudriez ajouter sbin dans la boucle. L'ajouter une seule fois a plus de sens:array+=(sbin); for i in ...
PSkocik

parce que dans la boucle, je dois vérifier si certains fichiers qui sont copiés par cette boucle ont du contenu ..
damekr

5
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

Cela itérera sur votre liste, clouera sbinla fin de ladite liste de manière conditionnelle et l'inclura sbindans le contenu itérable.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.