Forum Programmation.shell J’ai besoin d’explication

Posté par  . Licence CC By‑SA.
Étiquettes :
0
24
août
2015

Soit le code suivant :

#!/bin/bash

array1=("pi" "pas" "poux");
array2=("bim" "bam" "boom");

for ((i=0;i<${#array1[@]};++i));
 do
   echo "bim"
   array3[$i]=$array2[$i];
 done;

echo
echo ${array1[0]};
echo ${array1[1]};
echo ${array1[2]};
echo
echo ${array2[0]};
echo ${array2[1]};
echo ${array2[2]};
echo
echo ${array3[0]};
echo ${array3[1]};
echo ${array3[2]};
echo
echo ${#array1[@]};
echo ${#array2[@]};
echo ${#array3[@]};

Je comprends pas pourquoi ${array3[0]}, ${array3[1]} et ${array3[2]} renvoie :

bim[0]
bim[1]
bim[2]

Voici la sortie complète :

bim
bim
bim

pi
pas
poux

bim
bam
boom

bim[0]
bim[1]
bim[2]

3
3
3

Merci pour les explications (et oui je sais que bash est pas le meilleur moyen de manipuler des tableaux associatifs :/ Mais là c’est vraiment un question sur bash… J’espère qu’on va me fournir une réponse de qualité et que je pourrais me dire : « ah bah oui mais cest bien sûr, pourquoi n’y ai-je pas pensé ! »…

  • # boom bim[2] bim[2]

    Posté par  (site web personnel) . Évalué à 6.

    #!/bin/bash
    
    array2=("bim" "bam" "boom");
    i=2
    v=${array2[$i]}
    echo $v
    v=$array2[$i]
    echo $v
    v=${array2}[$i]
    echo $v
  • # Commentaire supprimé

    Posté par  . Évalué à 1. Dernière modification le 25 août 2015 à 08:51.

    Ce commentaire a été supprimé par l’équipe de modération.

  • # So… What ?

    Posté par  . Évalué à 1. Dernière modification le 25 août 2015 à 08:51.

    #!/bin/bash
    
    array1=("pi" "pas" "poux");
    array2=("bim" "bam" "boom");
    
    for ((i=0;i<${#array1[@]};++i));
     do
       echo "bim"
       array3[$i]=$array2[$i];
     done;
    
    echo
    echo ${array3}[0]};
    echo ${array3}[1]};
    echo ${array3}[2]};
  • # explications plus longues ;o)

    Posté par  (site web personnel) . Évalué à 6. Dernière modification le 25 août 2015 à 22:41.

    tu initialises array3 avec

    array3[$i]=$array2[$i];

    soit en décomposant
    $array2 et [ et $i et ]

    $array2 vaut la première variable du tableau … soit "bim"
    [ vaut [ ;o)
    $i vaut 0 1 2 en fonction de la boucle
    et ] vaut ]

    donc tes sorties sont logiques

    Maintenant si tu utilises

    array3[$i]=${array2[$i]};

    Tu devrais avoir ce que tu veux, enfin ce que tu imagines logique d'avoir.

    Je préconise d'utiliser les {} meme quand c'est pas forcement nécessaire, cela évite de les oublier quand c'est utile ;o)

    Pour les tableaux sous bash ne pas hésiter a lire : ABS en français

    • [^] # Re: explications plus longues ;o)

      Posté par  . Évalué à 2.

      Je préconise d'utiliser les {} meme quand c'est pas forcement nécessaire, cela évite de les oublier quand c'est utile ;o)

      Effectivement :)

      Merci pour l'explication.

    • [^] # Re: explications plus longues ;o)

      Posté par  (site web personnel) . Évalué à 2. Dernière modification le 25 août 2015 à 22:40.

      Je comprends pas pourquoi ${array3[0]}, ${array3[1]} et ${array3[2]} renvoie:

      Un coup tu traduis «la valeur à la position 0 du tableau array3» par $array3[0] et un coup par ${array3[0]} … :)

      Je préconise d'utiliser les {} meme quand c'est pas forcement nécessaire, cela évite de les oublier quand c'est utile ;o)

      Tout à fait, cela permet aussi de facilement insérer les modificateurs de remplacement lorsqu'on en a besoin.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.