Incrementer une variable dans une chaine

mikey -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    avec ${!var}
    $ a1=111; a2=222; a3=333
    $ for i in a{1..3} ; do echo ${!i}; done
    111
    222
    333
    $
    1
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    À 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
  3. mikey
     
    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
  4. Utilisateur anonyme
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  7. mikey
     
    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
  8. Utilisateur anonyme
     
    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
  9. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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