bash remplir un tableau dans la boucle
Comment puis-je remplir un tableau dans la boucle? J'aimerais faire quelque chose comme ça:
declare -A results
results["a"]=1
results["b"]=2
while read data; do
results[$data]=1
done
for i in "${!results[@]}"
do
echo "key : $i"
echo "value: ${results[$i]}"
done
Mais il semble que je ne peut pas ajouter quoi que ce soit d'un tableau à l'intérieur de la boucle. Pourquoi?
- Quelle est la version de bash utilisez-vous?
Vous devez vous connecter pour publier un commentaire.
Ce que vous avez devrait fonctionner, en supposant que vous avez une version de Bash qui prend en charge les tableaux associatifs pour commencer.
Si je peut prendre un sauvage deviner . . . exécutez-vous à quelque chose comme ceci:
? Qu'est — ce qui est votre
while
boucle une partie d'un pipeline? Si oui, alors queest le problème. Voyez-vous, chaque commande dans un pipeline reçoit un copie de la coquille de l'environnement d'exécution. Ainsi, lewhile
boucle serait remplissage d'une copie de laresults
tableau, et quand lewhile
boucle est terminée, que la copie disparaît.Modifiées afin d'ajouter: Si est le problème, alors que glenn jackman souligne dans un commentaire, vous pouvez y remédier en utilisant processus de substitution à la place:
De cette façon, bien que
command_that_outputs_keys
recevra uniquement une copie de la coquille de l'environnement d'exécution (comme avant), lewhile
boucle d'origine, le principal de l'environnement, de sorte que pouvez modifier le tableau d'origine.while ... done < <(command here)
while
ne sais pas à prendre le fichier comme entrée".< <(...)
de sens maintenant que je le connais, mais je n'aurais jamais deviné que c'était autorisé. J'ai mis à jour ma réponse. Merci encore! 😀Qui semble bien fonctionner:
Ubuntu 11.10 ici, bash: GNU bash, version 4.2.10(1)-release (x86_64-pc-linux-gnu).