Sto cercando di usare dizionari e sono incappato in un comportamento strano. Quando creo un dizionario come questo:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Lultimo elemento “prd” verrà stampato sullo schermo, non il primo. Eliminando ogni voce tranne la prima si otterrà loutput corretto. Non sono sicuro di cosa sto facendo di sbagliato perché ogni esempio di codice che ho esaminato utilizza dizionari come sopra. Qualcuno può individuare il mio errore?
Saluti
Commenti
Risposta
Penso che il commento di @Yurko sia la strada giusta.
Con bash precedente alla versione 4 (come /bin/bash
su un Mac):
- la riga
declare -A
genererà un errore (declare: -A: invalid option
) e larray è non dichiarato . - la seconda riga creerà un array indicizzato : poiché lindice viene valutato come unespressione aritmetica
- nelle espressioni aritmetiche bash: le parole “nude” sono trattate come nomi di variabili e alle variabili non impostate viene assegnato il valore zero
Pertanto, ogni stringa è assegnata a lindice 0
.
Prova questo:
declare -p servers
e dovresti vedere loutput
declare -a servers="([0]="prd")"
servers
fosse un array invece di un array associativo. Verifica la presenza di errori di battitura e verifica che la versione bash sia almeno 4.0 (la prima a supportare gli array associativi).