Jag försöker använda ordböcker och snubblade över ett konstigt beteende. När jag skapar en sådan ordbok:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Det sista elementet ”prd” skrivs ut på skärmen, inte den första. Att radera varje post utom den första kommer att resultera i rätt utdata. Jag är inte säker på vad jag gör fel för varje kodexempel jag tittade på använder ordböcker som ovan. Kan någon upptäcka mitt misstag?
Hälsningar
Kommentarer
Svar
Jag tror att @Yurkos kommentar är rätt spår.
Med bash före version 4 (som /bin/bash
på en Mac):
-
declare -A
raden avger ett fel (declare: -A: invalid option
) och matrisen är inte deklarerat . - Den andra raden skapar en indexerad array: eftersom index utvärderas som ett aritmetiskt uttryck
- i basiska aritmetiska uttryck: ”nakna” ord behandlas som namnen på variabler och unset-variabler får värdet noll
Därför tilldelas varje sträng till indexet 0
.
Prova detta:
declare -p servers
och du ska se utdata
declare -a servers="([0]="prd")"
servers
var en matris istället för associerande matris. Sök efter stavfel och kontrollera att bash-versionen är minst 4,0 (den första som stöder associerande matriser).