2015-08-13 1 views
1

Lorsque j'exécute le script shell suivant, j'obtiens toujours la sortie "grault" pour n'importe quelle touche. Quel serait le problème?Ecriture du script de l'interpréteur de commandes shell

merci!

#!/bin/bash 

declare -a MYMAP        
MYMAP=([foo]=bar [baz]=quux [corge]=grault) 

echo ${MYMAP[foo]} 

echo ${MYMAP[baz]} 
+0

Run 'déclare MYMAP' -p pour voir sa valeur réelle. –

Répondre

2

Créer un tableau associatif avec -A:

declare -A MYMAP 

Voir: help declare

+0

Je reçois l'erreur suivante avec -A associate-array.bash: ligne 2: declare: -A: option invalide declare: use: declare [-afFirtx] [-p] [nom [= valeur] ...] –

+1

Désolé, votre bash n'a pas d'option '-A'. Ajouter la sortie de 'echo $ BASH_VERSION' – Cyrus

+0

version: 3.2.57 –

0

L'autre réponse décrit comment le faire correctement, mais est ici l'explication des raisons pour lesquelles votre exemple se comporte comme il le fait .

declare -a crée un tableau indexé, qui n'accepte que des entiers pour l'index. Si vous fournissez une chaîne en tant qu'index, elle ne tiendra pas compte et la traitera comme un 0! (Je pense que c'est un mauvais comportement, il devrait juste donner une erreur).

Donc, c'est ce que votre code traduit à:

declare -a MYMAP # create indexed array       
MYMAP=([0]=bar [0]=quux [0]=grault) 

echo ${MYMAP[0]} # grault 

echo ${MYMAP[0]} # grault