Problème de variable comme nom de tableau

Seb -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je dois réaliser un code sur une liste de tableau en ksh.

Je cherche ensuite à un moment à afficher le tableau don le nom est stocké dans la variable "nom".

La ligne de commande est la suivante :
echo "le tableau résultat est: ${${nom}[*]}"

Or ceci me renvoie l'erreur suivante :
./bin/decoup_tab.ksh[136]: : bad substitution

Quelqu'un sait comment traiter un tableau dont le nom est une variable?

Merci d'avance pour votre aide.

3 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Et comment est déclaré ton tableau ?
    Peut être qu'avec ton code en entier (ou du moins un bout subséquent), on y verrait plus clair ;-(
    0
    1. Utilisateur anonyme
       
      Salut,

      c'est moins un problème de code que d'algo;
      et plus précisément, d'adaptation de l'algo aux capacités du langage choisi.
      En l'occurrence, le shell ne peut pas faire ça.
      0
    2. Seb_6369 Messages postés 5 Statut Membre
       
      Bonjour zipe 31,

      voici plus de détails sur le code. J'ai fait un extrait de la partie qui nous interesse (normalement cette partie est intégré dans un while qui change la variable "NOM_TAB" et les éléments:

      #!/usr/bin/ksh -x

      NOM_TAB=GROUPE_00
      echo $NOM_TAB
      nom=tab_${NOM_TAB}
      echo $nom
      set -A ${nom} ELEMENT1 ELEMENT2
      echo "le tableau resultat est : ${${nom}[*]}"


      Voici le résultat :

      + NOM_TAB=GROUPE_00
      + echo GROUPE_00
      GROUPE_00
      + nom=tab_GROUPE_00
      + echo tab_GROUPE_00
      tab_GROUPE_00
      + set -A tab_GROUPE_00 ELEMENT1 ELEMENT2
      ./test.ksh[8]: : bad substitution

      Merci d'avance pour votre aide
      0
  2. Flachy Joe Messages postés 2303 Statut Membre 261
     
    Salut,
    Voila une solution en Bash, en ksh je sais pas ce que ça donne :
    #!/bin/bash

    traderidera=( machin truc chose )
    nom='traderidera'

    t0=${nom}[*]
    echo "le tableau résultat est: ${!t0}"
    0
    1. Flachy Joe Messages postés 2303 Statut Membre 261
       
      Ce n'était pas valide en ksh mais voila une version compatible :
      eval t1=\${${nom}[*]}

      echo "le tableau résultat est: $t1"
      0
    2. Seb_6369 Messages postés 5 Statut Membre
       
      Merci Flachy_Joe, j'ai bien essayé mais ça ne semble pas fonctionner pour mon cas...
      0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    et comme ça
    NOM_TAB=GROUPE_00
    echo $NOM_TAB
    nom=tab_${NOM_TAB}
    echo $nom
    set -A ${!nom} ELEMENT1 ELEMENT2
    echo "le tableau resultat est : ${nom[*]}"

    résultat
    + NOM_TAB=GROUPE_00
    + echo GROUPE_00
    GROUPE_00
    + nom=tab_GROUPE_00
    + echo tab_GROUPE_00
    tab_GROUPE_00
    + set -A nom ELEMENT1 ELEMENT2
    + echo 'le tableau resultat est : ELEMENT1 ELEMENT2'
    le tableau resultat est : ELEMENT1 ELEMENT2
    0
    1. Seb_6369 Messages postés 5 Statut Membre
       
      Hello dubcek,
      je viens de faire le test mais la réponse ne correspond pas à la tienne :'(

      je ne pense pas avoir fait d'erreur dans le code ;)
      #!/usr/bin/ksh -x
      NOM_TAB=GROUPE_00
      echo $NOM_TAB
      nom=tab_${NOM_TAB}
      echo $nom
      set -A ${!nom} ELEMENT1 ELEMENT2
      echo "le tableau resultat est : ${nom[*]}"


      + NOM_TAB=GROUPE_00
      + echo GROUPE_00
      GROUPE_00
      + nom=tab_GROUPE_00
      + echo tab_GROUPE_00
      tab_GROUPE_00
      ./test.ksh[7]: : bad substitution
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      quelle version de ksh ?
      ksh ~ $ ksh --version
      version sh (AT&T Research) 93t+ 2009-05-01
      0
    3. Seb_6369 Messages postés 5 Statut Membre
       
      pdksh-5.2.14-36.el5
      (je n'ai malheureusement pas la possibilité d'avoir une version plus... récente ;))
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      ceci fonctionne ?
      ksh ~ $ a=11
      ksh ~ $ nameref b=a
      ksh ~ $ echo $b
      11
      ksh ~ $ echo ${!b}
      a
      0
    5. Seb_6369 Messages postés 5 Statut Membre
       
      dubcek

      Je viens de faire le test sur la machine à disposition et ça ne fonctionne pas :

      ./t.sh
      + a=11
      + nameref b=a
      ./t.sh[4]: nameref: not found
      + echo

      ./t.sh[6]: : bad substitution

      J'ai fais le test sur une autre machine possédant une autre souche et là, oh miracle ça marche. Cela semble donc venir de la souche qui est incompatible, je vais donc demander une nouvelle souche :D
      0