Szótárakat próbálok használni, és furcsa viselkedésben botlottam meg. Amikor ilyen szótárat hozok létre:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Az utolsó elem “prd” a képernyőn lesz kinyomtatva, nem az első. Az első bejegyzés kivételével minden bejegyzést a megfelelő kimenet eredményez. Nem vagyok biztos benne, hogy mit csinálok rosszul, mert minden kódpélda, amelyet megnéztem, a fentiekhez hasonló szótárakat használ. Valaki észreveszi a hibámat?
Üdvözlet
Megjegyzések
Válasz
Úgy gondolom, hogy @Yurko megjegyzése a helyes út.
A 4. verziót megelőző bash-val (például /bin/bash
Mac-en):
- a
declare -A
sor hibát fog kiadni (declare: -A: invalid option
), és a tömb nincs deklarálva . - a 2. sor létrehoz egy indexelt tömböt: mivel az indexet aritmetikai kifejezésként értékelik
- bash aritmetikai kifejezésekben: a “csupasz” szavakat változók neveként kezelik, és a nem beállított változók nulla értéket kapnak
Ezért minden karaktersorozatot a az index 0
.
Próbálja ki:
declare -p servers
és látnia kell a kimenetet
declare -a servers="([0]="prd")"
servers
tömb lenne asszociatív tömb helyett. Ellenőrizze, hogy vannak-e elírási hibák, és ellenőrizze, hogy a bash verzió legalább 4,0-e (az első támogatja-e az asszociatív tömböket).