Jeg prøver å bruke ordbøker og snublet over en merkelig oppførsel. Når jeg oppretter en ordbok som denne:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Det siste elementet «prd» blir skrevet ut på skjermen, ikke den første. Slette hver oppføring bortsett fra den første, vil resultere i riktig utdata. Jeg er ikke sikker på hva jeg gjør galt, fordi hvert kodeeksempel jeg så på, bruker ordbøker som ovenfor. Kan noen få øye på feilen min?
Hilsen
Kommentarer
Svar
Jeg tror @Yurkos kommentar er riktig spor.
Med bash før versjon 4 (som /bin/bash
på en Mac):
-
declare -A
-linjen avgir en feil (declare: -A: invalid option
) og matrisen er ikke erklært . - 2. linje vil opprette en indeksert matrise: siden indeksen blir evaluert som et aritmetisk uttrykk
- i basiske aritmetiske uttrykk: «bare» ord blir behandlet som navn på variabler, og usett variabler får verdien null
Derfor tildeles hver streng til indeksen 0
.
Prøv dette:
declare -p servers
og du bør se utdata
declare -a servers="([0]="prd")"
servers
var en matrise i stedet for en assosiativ matrise. Se etter skrivefeil, og sjekk at bash-versjonen er minst 4,0 (den første som støtter assosiative matriser).