#1 Le 04/08/2015, à 20:59
- Antynea
(Résolu) Bash : boucle for , résultat innattendu
Bonjour,
voici un petit code tout bête, mais dont je ne comprends pas la sortie ...
#! /usr/bin/bash
tab=("zae" "er t" "rt yu")
for i in "/etc/${tab[@]}" ; do echo ${i} ; done
echo renvoie ceci :
/etc/zae
er t
rt yu
Vraiment mystérieux comme comportement...
Mais pourquoi diable, indique-t-il le chemin complet lors de la première passe, mais pas les fois suivantes ?
Comment corriger le code pour qu'il affiche :
/etc/zae
/etc/er t
/etc/rt yu
ou
zae
er t
rt yu
Dernière modification par Antynea (Le 05/08/2015, à 13:19)
Hors ligne
#2 Le 04/08/2015, à 21:07
- jplemoine
Re : (Résolu) Bash : boucle for , résultat innattendu
J’aurais plutôt fait un truc du genre :
#! /usr/bin/bash
tab=("zae" "er t" "rt yu")
for i in "${tab[@]}" ; do echo "/etc/${i}" ; done
De plus, chez moi, bash est dans /bin pas dans /usr/bin
Dernière modification par jplemoine (Le 04/08/2015, à 21:07)
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#3 Le 04/08/2015, à 21:08
- pingouinux
Re : (Résolu) Bash : boucle for , résultat innattendu
Bonsoir,
$ for i in "${tab[@]}" ; do echo "${i}" ; done
zae
er t
rt yu
$ for i in "${tab[@]}" ; do echo /etc/"${i}" ; done
/etc/zae
/etc/er t
/etc/rt yu
Hors ligne
#4 Le 04/08/2015, à 21:26
- Antynea
Re : (Résolu) Bash : boucle for , résultat innattendu
Salut,
Merci pour vos réponses.
évidement faire l'inverse marche à la perfection
toujours est-il que le résultat est tout de même très innattendu.
Bonne soirée.
Dernière modification par Antynea (Le 04/08/2015, à 21:27)
Hors ligne
#5 Le 04/08/2015, à 21:56
- tiramiseb
Re : (Résolu) Bash : boucle for , résultat innattendu
Salut,
Bah non, ce n'est pas inattendu, c'est parfaitement logique...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#6 Le 04/08/2015, à 22:01
- vv221
Re : (Résolu) Bash : boucle for , résultat innattendu
tab=("zae" "er t" "rt yu")
for i in "/etc/${tab[@]}" ; do echo ${i} ; done
Développons ${tab[@]}, ça donne :
"zae" "er t" "rt yu"
Donc en le replaçant dans la boucle for :
for i in /etc/"zae" "er t" "rt yu" ; do echo ${i} ; done
Le résultat te semble plus clair en voyant la boucle écrite de cette façon ?
Jouer sur Ubuntu ? Facile !
Hors ligne
#7 Le 04/08/2015, à 23:35
- Antynea
Re : (Résolu) Bash : boucle for , résultat innattendu
@vv221
Bêtement, je pensais qu'il aurait remplacé "/etc/${tab[@]}" par "/etc/zae" "/etc/er t" ...
Merci, ça m'a permis d'y voir plus clair et de changer mon approche.
Hors ligne
#8 Le 05/08/2015, à 13:14
- tiramiseb
Re : (Résolu) Bash : boucle for , résultat innattendu
En fait, ce qu'il faut savoir avec bash, c'est que la mention d'une variable ne "donne" pas la variable à la fonction placée devant. Un shell remplace simplement la mention à la variable par son contenu, avant d'exécuter la ligne (ou la commande) concernée.
Comme si on faisait cette manipulation manuellement...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 06/08/2015, à 01:03
- Antynea
Re : (Résolu) Bash : boucle for , résultat innattendu
@tiramiseb
Merci pour ton explication.
c'est exactement ce que j'en avais déduit suite à l'exemple de @vv221.
Au moins, maintenant, je suis fixé.
Hors ligne