Jessaye dutiliser des dictionnaires et je suis tombé sur un comportement étrange. Lorsque je crée un dictionnaire comme celui-ci:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Le dernier élément « prd » sera imprimé à lécran, pas le premier. La suppression de toutes les entrées à lexception de la première aboutira à la sortie correcte. Je ne suis pas sûr de ce que je fais mal, car chaque exemple de code que jai examiné utilise des dictionnaires comme ci-dessus. Quelquun peut-il repérer mon erreur?
Salutations
Commentaires
Answer
Je pense que le commentaire de @Yurko est la bonne voie.
Avec bash avant la version 4 (comme /bin/bash
sur un Mac):
- la ligne
declare -A
émettra une erreur (declare: -A: invalid option
) et le tableau est non déclaré . - la 2ème ligne créera un tableau indexé : puisque lindex est évalué comme une expression arithmétique
- dans les expressions arithmétiques bash: les mots « nus » sont traités comme les noms de variables; et les variables non définies reçoivent la valeur zéro
Par conséquent, chaque chaîne est affectée à lindex 0
.
Essayez ceci:
declare -p servers
et vous devriez voir la sortie
declare -a servers="([0]="prd")"
servers
était un tableau au lieu dun tableau associatif. Recherchez les fautes de frappe et vérifiez que la version de bash est au moins 4.0 (la première à prendre en charge les tableaux associatifs).