IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comment recuperer un tableau dans une fonction?


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut Comment recuperer un tableau dans une fonction?
    Bonjour,

    Dans mon script bash, j'ai une variable de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list_values=( elem1 "elem2 "elem2_2 elem2_3"" elem3)
    je souhaite le passer a une fonction (ma_fonction $list_values), mais je ne parviens pas a acceder aux valeurs elem2_2 et elem2_3. Comment parvenir a cela?

    Dans le code de ma fonction, $2 renvoie elem2 mais ${2[1]} renvoie une erreur.

    Merci a tous.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    Tu sembles vouloir faire un tableau de tableaux, mais ce n'est pas possible en bash.

    Enfin... pas comme ça.

    Il faut créer deux tableaux distincts :
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    array=( elem1 elem2 elem3 elem4 )
    elem2=( elem2_1 elem2_2 )
    eval echo "deuxième_tableau.deuxième_élément : \\\"\${${array[1]}[1]}\\\"."
    deuxième_tableau.deuxième_élément : "elem2_2".
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Bonjour,

    Je te remercie pour ta reponse. Cela semble fonctionner, mais en dehors d'une fonction.
    avec un code tel que celui-ci, j'obtiens une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    array=( elem1 elem2 elem3 elem4 )
    elem2=( elem2_1 elem2_2 )
     
    function ma_function { #avec elem2 en argument
    echo $1 # retour : elem2
    eval echo "\\\"\${${1[0]}[0]}\\\"" //bad substitution
    }
    comment faire donc pour recuperer le tableau et les valeurs a l'interieur de la fonction?

    De plus, pourrais tu expliquer pourquoi (en dehors d'une fonction):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    eval echo "\\\"\${${array[1]}[1]}\\\"" # affiche "elem2_2"
    et avec une variable il faut ajouter un autre eval pour obtenir le meme resultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tre=eval eval echo "\\\"\${${array[1]}[1]}\\\"" 
    echo tre # affiche "elem2_2"
    Merci

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    point 1 : tu fais appel directement au tableau elem2, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ma_function { echo $1; eval echo "\\\"\${$1[0]}\\\""; }
    point 2 : il faut utiliser une substitution de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tre=$(eval echo "\\\"\${${array[1]}[1]}\\\"")
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Je te remercie grandement pour ton aide.
    J'aurai un dernier point a soulever, il y aurait il un moyen de se debarasser des guillemets dans le resultat final?
    Le but serait d'obtenir que la variable tre contienne elem2_2 et non plus "elem2_2".

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    Oui, je ne les avais mis que pour mettre en évidence le résultat.
    Enlève les \\\" de part et d'autre, c'est tout.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    C'est parfaitement ce que je recherchais.
    je te remercie beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Comment faire un tableau dans une fonction?
    Par Alexandrebox dans le forum Langage
    Réponses: 6
    Dernier message: 06/10/2008, 00h12
  2. comment recuperer le resultat dans une fonction
    Par birame dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/06/2007, 12h00
  3. Comment définir un tableau dans une classe?
    Par Pragmateek dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 30/04/2006, 20h34
  4. Réponses: 2
    Dernier message: 19/01/2006, 21h59
  5. Recuperation de formulaire dans une fonction
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 23/06/2004, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo