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 POSIX Discussion :

Shell : Passage de tableau en paramètre


Sujet :

Shell et commandes POSIX

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut Shell : Passage de tableau en paramètre
    Bonjour,
    Je cherche à savoir si on peut envoyer un tableau en paramètre en shell et le recevoir dans une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/sh
     
    my_func
    {
    # Ici je voudrai récupérer le tableau fournit en paramètre $1? dans la variable tableau TAB_RECUP
    #...
    }
     
    # Initialisation du tableau TAB ici
    #...
     
    my_func ${TAB[@]}

    Merci

  2. #2
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Une petite question : tu es en VRAI /bin/sh ? ou est-ce que sh est un lien déguisé vers bash ?

    Parce que je n'ai jamais fait de script en vrai sh, mais je ne suis pas sur que ce shell gère de vrais tableaux ?!

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 231
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par VITALTH Voir le message
    Bonjour,
    Je cherche à savoir si on peut envoyer un tableau en paramètre en shell et le recevoir dans une fonction
    Le "tableau" peut-il être un fichier?

    Michel

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Pour répondre à Alek-C

    Une petite question : tu es en VRAI /bin/sh ? ou est-ce que sh est un lien déguisé vers bash ?

    Parce que je n'ai jamais fait de script en vrai sh, mais je ne suis pas sur que ce shell gère de vrais tableaux ?!
    Honnêtement je n'avais jamais vérifié mais c'est vrai que le shell tout court je ne connaissais pas dans les doc.

    QUant à Michelk12 : Ben si cétait un fichier je crois que je m'en serai tiré mais j'aurai préféré un tableau.

    Apparemment j'ai l'impression que ça ne se fait pas : en fouillant le plus possible j'ai pas trouvé alors je me suis débrouillé autrement

    Dans le script appelant j'ai passé en paramètre le nombre d'élément du tableau et le tableau
    et dans le script appelé j'ai fait un boucle sur le nombre d'élément du tableau (premier paramètre pour récupérer dans un tableau les paramètres suivantes (en fait les différents indices du tableau). J'ai utilisé pour ce faire l'instruction shift:

    Ca a donné a peu près ceci :
    Pour le shell appelé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    NB_CONTENU=$1
    shift
    i=0
    while [ $1 -le $((NB_CONTENU-1)); do
      TAB[$i]=$1
      shift
      i=$(($i+1))
    done
    et pour le shell appelant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./Appele.sh $NB_CONTENU "${ARRAY[@]}"
    Ca ca fonctionne bien mais j'aurai préféré récupérer le tableau pour que ce soit moins l'usine à gaz.

  5. #5
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Tu ne peux pas passer de tableau à une fonction, a un script shell ou plus généralement à une commande en ligne Unix.

    Les arguments d'une commande sous Unix sont strictement des chaines de caractères (char **argv).

    Par contre, tu peux très bien passer le nom d'un tableau en paramètre et créer un nouveau tableau dans ta fonction à partir du premier. Ca ne fonctionne que si le tableau est une variable globale (cas habituel en shell).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function f
    {
      z=($(eval echo $(echo \${$1[@]})))
      echo ${z[@]}
    }
     
    tableau[0]=zero
    tableau[1]=un
    tableau[2]=deux
     
    f tableau
    PS: C'est un peu plus compliqué si des élements du tableau sont vides ou contiennent des espaces ...
    ɹǝsn *sıɹɐlos*

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Tu ne peux pas passer de tableau à une fonction, a un script shell ou plus généralement à une commande en ligne Unix.

    Les arguments d'une commande sous Unix sont strictement des chaines de caractères (char **argv).
    C'est ce que je pensais (malheureusement).

    Par contre, tu peux très bien passer le nom d'un tableau en paramètre et créer un nouveau tableau dans ta fonction à partir du premier. Ca ne fonctionne que si le tableau est une variable globale (cas habituel en shell).
    Je vois ce que tu veux dire mais àa justement je n'y tiens pas : car ma fonction fonctionnera en récursive :
    le script appel la fonction qui rappelle le script qui rappelle la fonction et ainsi de suite

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Si ta fonction exécute bien le script, tu n'auras pas de problème de récursivité. Les variables shell ne sont pas partagées entre shells distincts.
    ɹǝsn *sıɹɐlos*

  8. #8
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut y'a peut-être mieux
    Citation Envoyé par jlliagre Voir le message
    Tu ne peux pas passer de tableau à une fonction, a un script shell ou plus généralement à une commande en ligne Unix.
    ok je me disais aussi ....
    Citation Envoyé par jlliagre Voir le message
    Ca ne fonctionne que si le tableau est une variable globale (cas habituel en shell).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function f
    {
      z=($(eval echo $(echo \${$1[@]})))
      echo ${z[@]}
    }
     
    tableau[0]=zero
    tableau[1]=un
    tableau[2]=deux
     
    f tableau
    PS: C'est un peu plus compliqué si des élements du tableau sont vides ou contiennent des espaces ...
    Ou bien si c'est un tableau associatif. Merci, utile, mais j'ai peut-être trouvé mieux : http://forum.ubuntu-fr.org/viewtopic.php?id=2008482

  9. #9
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par Wattael
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ declare -A assocArray=( ["bla"]="bla bla" ["tra la"]="tra la la" )
    $ maFonc() { declare -n tableauAsso=$1; for i in "${!tableauAsso[@]}"; do echo "tableauAsso[$i] = ${tableauAsso["$i"]}"; done;}
    $ maFonc assocArray
    tableauAsso[tra la] = tra la la
    tableauAsso[bla] = bla bla

Discussions similaires

  1. Passage de tableau en paramètre et affectation
    Par Jimalexp dans le forum C++
    Réponses: 4
    Dernier message: 23/01/2009, 08h40
  2. Passage de tableau en paramètre
    Par Teddy dans le forum Débuter
    Réponses: 3
    Dernier message: 26/12/2007, 11h54
  3. Réponses: 2
    Dernier message: 15/01/2007, 18h42
  4. Problème de passage de tableau en paramètre
    Par Tueur_a_gage dans le forum ASP
    Réponses: 9
    Dernier message: 16/11/2006, 20h09
  5. Passage de tableau en paramètre...
    Par Doomi dans le forum C
    Réponses: 14
    Dernier message: 20/10/2005, 14h08

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