Problème de variable comme nom de tableau

Fermé
Seb - 24 sept. 2013 à 14:40
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 - 26 sept. 2013 à 08:08
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.
A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
24 sept. 2013 à 18:16
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
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
Seb_6369 Messages postés 5 Date d'inscription mercredi 25 septembre 2013 Statut Membre Dernière intervention 25 septembre 2013
25 sept. 2013 à 09:28
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
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
24 sept. 2013 à 22:17
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
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
Modifié par Flachy Joe le 24/09/2013 à 22:42
Ce n'était pas valide en ksh mais voila une version compatible :
eval t1=\${${nom}[*]}

echo "le tableau résultat est: $t1"
0
Seb_6369 Messages postés 5 Date d'inscription mercredi 25 septembre 2013 Statut Membre Dernière intervention 25 septembre 2013
25 sept. 2013 à 09:29
Merci Flachy_Joe, j'ai bien essayé mais ça ne semble pas fonctionner pour mon cas...
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
25 sept. 2013 à 10:07
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
Seb_6369 Messages postés 5 Date d'inscription mercredi 25 septembre 2013 Statut Membre Dernière intervention 25 septembre 2013
Modifié par Seb_6369 le 25/09/2013 à 10:17
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
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
25 sept. 2013 à 11:17
quelle version de ksh ?
ksh ~ $ ksh --version
version sh (AT&T Research) 93t+ 2009-05-01
0
Seb_6369 Messages postés 5 Date d'inscription mercredi 25 septembre 2013 Statut Membre Dernière intervention 25 septembre 2013
25 sept. 2013 à 11:39
pdksh-5.2.14-36.el5
(je n'ai malheureusement pas la possibilité d'avoir une version plus... récente ;))
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
25 sept. 2013 à 15:51
ceci fonctionne ?
ksh ~ $ a=11
ksh ~ $ nameref b=a
ksh ~ $ echo $b
11
ksh ~ $ echo ${!b}
a
0
Seb_6369 Messages postés 5 Date d'inscription mercredi 25 septembre 2013 Statut Membre Dernière intervention 25 septembre 2013
25 sept. 2013 à 18:01
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