Parcourir un tableau de nom variable...

Le
David BERCOT
Bonjour,

Visiblement, il me manque quelque chose, mais je n'arrive pas à trouver
quoi
Je cherche donc à parcourir un tableau dont le nom est fourni au
lancement du script. Et là, je n'y arrive pas

Ce serait quelque chose du genre :

#!/bin/bash

tableau1=(element1 element2 element3)
tableau2=(element1 element2 element3)
tableau3=(element1 element2 element3)

tableau="$1" # Nom du tableau à utiliser

for element in "${$tableau[@]}"
do
echo $element
done

Et là, bien évidemment, ma syntaxe "${$tableau[@]}" ne lui plaÃ=
®t pas

Auriez-vous une idée pour résoudre ce problème ?

Merci d'avance.

David.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/20120320094822.0c7aad0b@debian-david
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Adrien Martins
Le #24335971
Le 20/03/2012 09:48, David BERCOT a écrit :
Bonjour,

Visiblement, il me manque quelque chose, mais je n'arrive pas à trouver
quoi...
Je cherche donc à parcourir un tableau dont le nom est fourni au
lancement du script. Et là, je n'y arrive pas...

Ce serait quelque chose du genre :

#!/bin/bash

tableau1=(element1 element2 element3)
tableau2=(element1 element2 element3)
tableau3=(element1 element2 element3)

tableau="$1" # Nom du tableau à utiliser

for element in "${$tableau[@]}"
do
echo $element
done

Et là, bien évidemment, ma syntaxe "${$tableau[@]}" ne lui plaît pas...

Auriez-vous une idée pour résoudre ce problème ?

Merci d'avance.

David.




Bonjour,

Déjà, il ne faut pas mettre de $ dans les accolades. Il faut écrire
"${tableau[@]}".

Ensuite, tableau est une chaîne de caractère et non pas une référence
vers un tableau pré-enregistré. Du coup, ton echo $element va renvoyer
ton premier paramètre.

Personnellement, j'écrirai le script de cette manière :
#!/bin/bash

tableau1=(element1 element2 element3)
tableau2=(element1 element2 element3)
tableau3=(element1 element2 element3)

case $1 in
"tableau1")
tableau=${tableau1[@]}
;;
"tableau2")
tableau=${tableau2[@]}
;;
"tableau3")
tableau=${tableau3[@]}
;;
esac

for element in ${tableau[@]}
do
echo $element
done

Adrien

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
daniel huhardeaux
Le #24336011
Le 20/03/2012 10:16, Adrien Martins a écrit :
Le 20/03/2012 09:48, David BERCOT a écrit :
Bonjour,

Visiblement, il me manque quelque chose, mais je n'arrive pas à trouver
quoi...
Je cherche donc à parcourir un tableau dont le nom est fourni au
lancement du script. Et là, je n'y arrive pas...

Ce serait quelque chose du genre :

#!/bin/bash

tableau1=(element1 element2 element3)
tableau2=(element1 element2 element3)
tableau3=(element1 element2 element3)

tableau="$1" # Nom du tableau à utiliser

for element in "${$tableau[@]}"
do
echo $element
done

Et là, bien évidemment, ma syntaxe "${$tableau[@]}" ne lui plaît pas...

Auriez-vous une idée pour résoudre ce problème ?

Merci d'avance.

David.




Bonjour,

Déjà, il ne faut pas mettre de $ dans les accolades. Il faut écrire
"${tableau[@]}".

Ensuite, tableau est une chaîne de caractère et non pas une référence
vers un tableau pré-enregistré. Du coup, ton echo $element va renvoyer
ton premier paramètre.

Personnellement, j'écrirai le script de cette manière :
#!/bin/bash

tableau1=(element1 element2 element3)
tableau2=(element1 element2 element3)
tableau3=(element1 element2 element3)

case $1 in
"tableau1")
tableau=${tableau1[@]}
;;
"tableau2")
tableau=${tableau2[@]}
;;
"tableau3")
tableau=${tableau3[@]}
;;
esac

for element in ${tableau[@]}
do
echo $element
done




Autre solution:

#!/bin/bash

tableau1() {
tableau=(element1 element2 element3)
}

tableau2() {
tableau=(element1 element2 element3)
}

tableau3() {
tableau=(element1 element2 element3)
}

# Main menu

$1 # vaut tableau1 ou tableau2 ou tableau3

for element in ${tableau[@]}
do
echo $element
done

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
David BERCOT
Le #24336021
C'est parfait !

Il me suffit de faire :
tableau="$(eval echo "${$1[@]}") à la place de tableau="$1"
et tout le reste fonctionne...

Merci.

David.

Le Tue, 20 Mar 2012 10:18:04 +0100,
Timothee CLERC
Bonjour,

Cela pourra peut-être te donner une piste.

#!/bin/bash

tableau1=(element1 element2 element3)
tableau2=(element1 element2 element3)
tableau3=(element1 element2 element3)

tableau="$1" # Nom du tableau à utiliser
echo "$(eval echo "${$tableau[@]}")"

bash toto tableau1
element1 element2 element3

Le 20/03/2012 09:48, David BERCOT a écrit :
Bonjour,

Visiblement, il me manque quelque chose, mais je n'arrive pas à
trouver quoi...
Je cherche donc à parcourir un tableau dont le nom est fourni au
lancement du script. Et là, je n'y arrive pas...

Ce serait quelque chose du genre :

#!/bin/bash

tableau1=(element1 element2 element3)
tableau2=(element1 element2 element3)
tableau3=(element1 element2 element3)

tableau="$1" # Nom du tableau à utiliser

for element in "${$tableau[@]}"
do
echo $element
done

Et là, bien évidemment, ma syntaxe "${$tableau[@]}" ne lui pla ît
pas...

Auriez-vous une idée pour résoudre ce problème ?

Merci d'avance.

David.





--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Publicité
Poster une réponse
Anonyme