Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/08/2015, à 21: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, à 14:19)

Hors ligne

#2 Le 04/08/2015, à 22: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, à 22:07)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 04/08/2015, à 22: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, à 22:26

Antynea

Re : (Résolu) Bash : boucle for , résultat innattendu

Salut,

Merci pour vos réponses.
évidement faire l'inverse marche à la perfection wink

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, à 22:27)

Hors ligne

#5 Le 04/08/2015, à 22:56

tiramiseb

Re : (Résolu) Bash : boucle for , résultat innattendu

Salut,

Bah non, ce n'est pas inattendu, c'est parfaitement logique...

Hors ligne

#6 Le 04/08/2015, à 23: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 05/08/2015, à 00: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, à 14: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...

Hors ligne

#9 Le 06/08/2015, à 02: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