Jeg prøver at bruge ordbøger og snuble over en underlig opførsel. Når jeg opretter en ordbog som denne:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Det sidste element “prd” bliver udskrevet på skærmen, ikke den første. Sletning af hver post undtagen den første resulterer i den korrekte output. Jeg er ikke sikker på, hvad jeg laver forkert, for hvert kodeeksempel, jeg kiggede på, bruger ordbøger som ovenfor. Kan nogen få øje på min fejl?
Hilsner
Kommentarer
Svar
Jeg tror, @Yurkos kommentar er det rigtige spor.
Med bash før version 4 (såsom /bin/bash
på en Mac):
-
declare -A
linjen udsender en fejl (declare: -A: invalid option
), og arrayet er ikke deklareret . - 2. linje opretter et indekseret array: da indekset evalueres som et aritmetisk udtryk
- i basiske aritmetiske udtryk: “bare” ord behandles som navnene på variabler, og usættede variabler får værdien nul
Derfor tildeles hver streng til indekset 0
.
Prøv dette:
declare -p servers
og du skal se output
declare -a servers="([0]="prd")"
servers
var et array i stedet for associativt array. Kontroller, om der er skrivefejl, og kontroller, at bash-versionen er mindst 4,0 (den første, der understøtter associative arrays).