Incrementer une variable dans une chaine

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

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    À 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
    1. 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é
      1. Contributeur
        hello
        avec ${!var}
        $ a1=111; a2=222; a3=333
        $ for i in a{1..3} ; do echo ${!i}; done
        111
        222
        333
        $
        1. 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.
          1. Modérateur
            Ou encore...

             #!/bin/sh
            
            chaine1="coucou"
            chaine2="bonjour"
            chaine3="plop"
            
            for i in $(seq 1 3)
            do  
                eval "echo \$chaine$i"
            done


            Bonne chance
            1. 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
              1. 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é.