Ik probeer woordenboeken te gebruiken en stuit op een vreemd gedrag. Wanneer ik een woordenboek als dit maak:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Het laatste element “prd” wordt op het scherm afgedrukt, niet op de eerste. Als u elke invoer verwijdert, behalve de eerste, krijgt u de juiste uitvoer. Ik weet niet zeker wat ik verkeerd doe, want elk codevoorbeeld dat ik heb bekeken, gebruikt woordenboeken zoals hierboven. Kan iemand mijn fout herkennen?
Groeten
Reacties
Antwoord
Ik denk dat de opmerking van @Yurko de goede weg is.
Met bash vóór versie 4 (zoals /bin/bash
op een Mac):
- de regel
declare -A
geeft een foutmelding (declare: -A: invalid option
) en de array is niet gedeclareerd . - de 2e regel zal een geïndexeerde array creëren: aangezien de index wordt geëvalueerd als een rekenkundige uitdrukking
- in bash rekenkundige uitdrukkingen: “kale” woorden worden behandeld als de namen van variabelen; en niet-ingestelde variabelen krijgen de waarde nul
Daarom wordt elke string toegewezen aan de index 0
.
Probeer dit:
declare -p servers
en je zou de uitvoer moeten zien
declare -a servers="([0]="prd")"
servers
een array is in plaats van een associatieve array. Controleer op typefouten en controleer of de bash-versie ten minste 4.0 is (de eerste die associatieve arrays ondersteunt).