2013-04-23 18 views
5

sto cercando di creare un array associativo in bash nel seguente modoBash array associativi con spazio nella chiave

#!/bin/bash 
hash["name"]='Ashwin' 
echo ${hash["name"]} 

stampata l'uscita desiderata: Ashwin quando eseguito.

Ma quando la chiave ha uno spazio in esso,

#!/bin/bash 
hash["first name"]='Ashwin' 
echo ${hash["first name"]} 

ottengo il seguente errore

test2.sh: line 2: first name: syntax error in expression (error token is "name") 

sono le chiavi non ha permesso di avere spazi in esso?

+2

Basato sul tuo commento alla risposta che si sta utilizzando bash 3. Bash 3 non supporta array associativi, qui ci sono alcuni [soluzioni] (http://stackoverflow.com/questions/11776468/create-associative-array-in-bash-3) – iruvar

+2

Poiché gli array associativi non sono supportati prima di 'bash' 4, il tuo primo esempio viene effettivamente trattato come un array normale. Il parser è in grado di gestire stringhe semplici in cui si aspetta un valore intero e considera tutti come aventi il ​​valore 0. È possibile indicizzare 'hash' con molte stringhe diverse e' $ {hash [chiave]} 'si espande ancora a' Ashwin'. – chepner

risposta

9

Se si utilizza prima declare -A hash prima delle assegnazioni di valori, lo script viene eseguito come previsto.

testati utilizzando bash 4.2.25

+0

Questo non è corretto almeno su bash 3.2 – anubhava

+0

Sì, come @anubhava ha detto che non funziona su bash 3.2. – Bajji

Problemi correlati