|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() |
Bonjour,
Ce que je cherche ne semble pas être des plus simples et cela fait plusieurs heures que j'essaye de trouver une solution, mais je fais un pas en avant puis un pas en arrière... Le but est de générer automatiquement des menus en se basant sur des tableaux. Ça aurait été assez simple si il était possible d'utiliser un index de type caractère à la place d'un entier, mais soit. Ayant connaissance de cette limitation, je crée donc deux tableaux avec une correspondance entre les index. Dans le premier tableau je met les descriptions des menus et dans le second tableau je met les fonctions liées à ces descriptions. Au finale j'aurais donc IDindex --> Description -> Fonction. Le problème que je rencontre c'est lorsque j'essaye de faire passer mes tableaux dans la fonction de génération du menu. J'ai essayé en mettant le tableau en paramètre de la fonction, en faisant un eval directement dans la fonction, etc. Rien de concret n'en ressort. Voici un exemple de ce que j'aimerais avoir, je sais que le code n'est pas fonctionnel mais c'est pour que mon charabia soit un peu plus compréhensible... Code :
|
||
|
|
10
|
|
|
#2 | ||||
|
Membre Expert
![]() |
Déjà, les tableaux associatifs sont possibles en bash :
Code :
Code :
|
||||
|
|
40
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() |
Salut,
Un grand merci pour cette réponse rapide et très claire ! ![]() Mon erreur venait de la déclaration d'un tableau avec -a à la place de -A. Et d'après ce que j'avais lu, je pensais qu'il n'était pas possible de créer un tableau associatif avec un index autre qu'un entier. Comme quoi il ne faut pas toujours se fier à ce que l'on peut trouver sur la toile... Pour ce qui est du code que tu proposes pour générer le menu, il est fonctionnel c'est parfait. Je n'ai pas encore tout compris je dois avouer Encore merci. |
|
|
10
|
|
|
#4 | ||
|
Candidat au titre de Membre du Club
![]() |
Re,
Il y a tout de même un bout de ton code que je n'arrive pas à m'expliquer. Il s'agit de la partie ou tu déclares un nouveau tableau contenant l'ancien. "declare -a desc=( "${!x}" )", le point d'exclamation à cet endroit doit signifier qu'on désire récupérer les index hors là on récupère les valeurs...et si on retire ce point d'exclamation cela génère une erreur. ${!coucou_menu[@]} = liste des index ${coucou_menu[@]} = liste des valeurs Si je cherche à comprendre cela, c'est que j'ai une idée pour améliorer la fonction de génération du menu. A la place de partir de deux tableaux différents en respectant une concordance des index, ce qui risque de ne pas toujours arriver. Ensuite comme dans la fonction de génération du menu que tu as proposées, on crée deux tableaux à partir de l'existant. L'un contenant les index et l'autre contenant les valeurs, ainsi ces deux nouveaux tableaux auront obligatoirement un index d'entier identique. Code :
|
||
|
|
10
|
|
|
#5 |
|
Membre Expert
![]() |
${!... retourne les index pour un tableau associatif (${!ARRAY[*]}); ici, il s'agit d'une référence
http://tldp.org/LDP/abs/html/bashver2.html#VARREFNEW |
|
|
10
|
|
|
#6 | ||
|
Candidat au titre de Membre du Club
![]() |
Intéressant ce système de référence, je ne connaissais pas. Dans ce cas le code devrait ressembler à ceci de ce que j'en déduis, mais ça ne fonctionne pas.
Le tableau "fonc" reste vide. Code :
|
||
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() |
Effectivement, ça ne semble pas marcher avec les index, je n'ai pas le niveau pour t'expliquer le pourquoi du comment cependant
Je peux te proposer ce contournement (utilisation de l'ancienne méthode pour les références) : Code :
|
||
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() |
Merci pour le conseil, je vais me baser là-dessus.
![]() Car au début j'utilisais la fonction eval et voici un exemple de code que j'avais trouvé pour un eval : fonc=($(eval echo $(echo \${!$1_menu[@]}))). Autrement dis, bien moins propre que ce que tu m'as proposé. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com