Încerc să folosesc dicționare și am dat peste un comportament ciudat. Când creez un dicționar de genul acesta:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Ultimul element „prd” va fi tipărit pe ecran, nu primul. Ștergerea fiecărei intrări, cu excepția primei, va duce la ieșirea corectă. Nu sunt sigur ce fac greșit, deoarece fiecare exemplu de cod la care am analizat folosește dicționare precum cele de mai sus. Poate cineva să vadă greșeala mea?
Salutări
Comentarii
Răspuns
Cred că comentariul lui @Yurko este drumul cel bun.
Cu bash înainte de versiunea 4 (cum ar fi /bin/bash
pe un Mac):
- linia
declare -A
va emite o eroare (declare: -A: invalid option
) și matricea este nedeclarat . - a doua linie va crea o matrice indexată : deoarece indexul este evaluat ca o expresie aritmetică
- în expresii aritmetice bash: cuvintele „goale” sunt tratate ca numele variabilelor, iar variabilelor nesetate au valoarea zero
Prin urmare, fiecare șir este atribuit indexul 0
.
Încercați acest lucru:
declare -p servers
și ar trebui să vedeți rezultatul
declare -a servers="([0]="prd")"
servers
ar fi un tablou în loc de un tabel asociativ. Verificați dacă există greșeli de tipar și verificați dacă versiunea bash este de cel puțin 4.0 (prima care acceptă matrici asociative).