Yritän käyttää sanakirjoja ja törmäsin outoon käyttäytymiseen. Kun luot tällaisen sanakirjan:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Viimeinen elementti ”prd” tulostetaan näytölle, ei ensimmäiselle. Jokaisen merkinnän poistaminen lukuun ottamatta ensimmäistä merkitsee oikeaa tulosta. En ole varma, mitä teen väärin, koska jokaisessa koodiesimerkissä, jota tarkastelin, käytetään edellä mainittuja sanakirjoja. Voiko kukaan havaita virheeni?
Terveisiä
Kommentteja
Vastaa
Mielestäni @Yurkon kommentti on oikea raita.
Bashilla ennen versiota 4 (kuten /bin/bash
Macissa):
- rivi
declare -A
lähettää virheen (declare: -A: invalid option
) ja taulukko on ei ilmoitettu . - 2. rivi luo indeksoitu taulukon: koska hakemisto arvioidaan aritmeettisena lausekkeena
- bash-aritmeettisissa lausekkeissa: ”paljaita” sanoja käsitellään muuttujien niminä; ja asettamattomille muuttujille annetaan arvo nolla
Siksi jokainen merkkijono määritetään hakemisto 0
.
Kokeile tätä:
declare -p servers
ja sinun pitäisi nähdä tulos
declare -a servers="([0]="prd")"
servers
olisi matriisi assosiatiivisen taulukon sijaan. Tarkista kirjoitusvirheet ja tarkista, että bash-versio on vähintään 4.0 (ensimmäinen, joka tukee assosiatiivisia taulukoita).