2013-04-23 7 views
5

Ich versuche eine assoziative Array in heftigen Schlag auf die folgende WeiseBash assoziativer Arrays mit dem Raum in dem Schlüssel

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

Dieser druckt die gewünschte Ausgabe zu erzeugen: Ashwin wenn sie ausgeführt werden.

Aber wenn der Schlüssel ein Leerzeichen enthält,

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

ich folgende Fehlermeldung erhalten

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

sind Schlüssel keine Leerzeichen in es haben darf?

+2

Basierend auf Ihren Kommentar zu der Antwort bash 3. Sie verwenden Bash 3 nicht unterstützt assoziative Arrays, hier getestet verwenden, sind einige [Abhilfen] (http://stackoverflow.com/questions/11776468/create-assoziative-array-in-bash-3) – iruvar

+2

Da assoziative Arrays vor 'bash' 4 nicht unterstützt werden, wird Ihr erstes Beispiel tatsächlich als reguläres Array behandelt. Der Parser ist in der Lage, mit einfachen Strings umzugehen, wo er einen ganzzahligen Wert erwartet und behandelt sie alle mit dem Wert 0. Sie können 'hash' mit vielen verschiedenen Strings indizieren und' $ {hash [key]} '' expandiert nach ' Ashwin. – chepner

Antwort

9

Wenn Sie zuerst declare -A hash vor Wertzuweisungen verwenden, wird das Skript wie erwartet ausgeführt.

Bash 4.2.25

+0

Das ist zumindest nicht richtig auf bash 3.2 – anubhava

+0

Ja wie @anubhava sagte, es funktioniert nicht auf Bash 3.2. – Bajji

Verwandte Themen