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. Contributeur
    hello
    avec ${!var}
    $ a1=111; a2=222; a3=333
    $ for i in a{1..3} ; do echo ${!i}; done
    111
    222
    333
    $
    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. 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é.