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 éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    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 723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 723
    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".

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    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 723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 723
    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]}\\\"")

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    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 723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 723
    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.

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    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, 01h12
  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, 13h00
  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, 21h34
  4. Réponses: 2
    Dernier message: 19/01/2006, 22h59
  5. Recuperation de formulaire dans une fonction
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 23/06/2004, 16h04

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