Incrementer une variable dans une chaine

Fermé
mikey - 3 déc. 2012 à 20:39
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 4 déc. 2012 à 19:56
Bonjour,
Je cherche à incrémenter une variable, c'est à dire chaine1, chaine2, chaine3 ...
Le tout dans une boucle:

i=0
while [ i != 4 ] ;do
chaine$i = "abc"
done

Se qui me donnerais
chaine1=abc
chaine2=abc
.......

Je ne trouve pas comment faire, si quelqu'un pouvait m'aider, merci

8 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 déc. 2012 à 09:38
hello
avec ${!var}
$ a1=111; a2=222; a3=333
$ for i in a{1..3} ; do echo ${!i}; done
111
222
333
$
1
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
3 déc. 2012 à 20:55
À mon avis tu n'as pas le choix il faut passer par la commande eval. Sinon en shell tu as des tableaux.
http://geekblog.over-blog.com/article-6305114.html

#!/bin/sh

for x in $(seq 1 3)
do
    eval "chaine_$x='plop$x'"
done

echo $chaine_1
echo $chaine_2
echo $chaine_3


... ce qui donne à l'exécution :

plop1
plop2
plop3


Bonne chance
0
Merci beaucoup pour votre réponse rapide

maintenant je souhaite les récuperer dans une boucle,
comme ci-dessous

i=0
while [ i != 4 ] ;do
echo $chaine_$i
done

se qui devrait me donner
abc
abc
....

Désolé je suis nouveau sous unix et je ne comprend pas toute les subtilité
0
Utilisateur anonyme
4 déc. 2012 à 09:50
salut,

Si tu crois devoir faire ainsi, c'est que ton problème est mal posé.
Incrémenter un nom de variable est une mauvaise solution.

Tu devrais réviser ton algorithme.

Éventuellement, expose ton problème ici, clairement, on te proposera une meilleure solution.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
4 déc. 2012 à 10:18
Ou encore...

 #!/bin/sh

chaine1="coucou"
chaine2="bonjour"
chaine3="plop"

for i in $(seq 1 3)
do  
    eval "echo \$chaine$i"
done


Bonne chance
0
En fait, dans une fonction j'ai un set et dans ce set j'ai une suite de mots qui désigne la même chose à un instant différent

Exemple: chaise temps temps1 temps2.... tempsn tablier

Je veux récupérer les temps, pour ensuite l'utiliser dans une autre fonction, de cette manière :

i=0 
while [$ i != $n ] ; do 
  echo $temps$i 
done 


J'espère avoir été clair
0
Utilisateur anonyme
4 déc. 2012 à 13:43
pas du tout.

c'est quoi un set ?
c'est quoi, selon toi, une fonction ?

quel est le contenu (le code) de cette fonction qui te donne un set ?

quelle est une sortie typique (voire plusieurs sorties, pour comparer), précisément, que tu veux traiter ?


l'écriture de shell scripts peut sembler pouvoir s'accommoder d'approximations.
C'est vrai de tout, et cela ne fait jamais de belles réussites, mais confine à la médiocrité.
0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
4 déc. 2012 à 19:56
Moi ce que je ne comprends pas c'est ce qu'il te faut de plus car tu as déjà deux réponses qui me paraissent répondre à ce problème :
https://forums.commentcamarche.net/forum/oldest/26601443-incrementer-une-variable-dans-une-chaine#3
https://forums.commentcamarche.net/forum/oldest/26601443-incrementer-une-variable-dans-une-chaine#5

Du coup ton problème est-il résolu ?
0