Salut,
J'essaie de lire le contenu d'un répertoire avec des fichiers possédant potentiellement des espaces pour les mettre dans un tableau. J'ai fait des tests mais il y a quelque chose que je ne comprend pas.
J'initialise d'abord un tableau et crée une fonction pour afficher un élément du tableau par ligne (même si les éléments contiennent des espaces) :
tab=()
display(){
for i in "$@"; do
echo "$i"
done
}
maintenant je fais une boucle pour me collecter tous les fichiers d'un répertoire donné :
i=0
find . -maxdepth 1 -type f | cut -d/ -f2- | while read file; do
tab[$i]="$file"
echo "tab[$i] = ${tab[$i]}"
i=$(($i+1))
done
Cela me donne
tab[0] = .bash_history
tab[1] = .xsession-errors
tab[2] = .dmrc
tab[3] = .Xauthority
tab[4] = .ICEauthority
tab[5] = .gtkrc-1.2-gnome2
tab[6] = .gksu.lock
tab[7] = .lesshst
tab[8] = .viminfo
tab[9] = t o t o
tab[10] = .recently-used.xbel
tab[11] = .mcoprc
tab[12] = .mysql_history
tab[13] = .bzr.log
mais pourtant la commande suivante ne m'affiche rien
display "${tab[@]}"
Quelqu'un saurait m'explique où ça coince ? je pense que c'est au niveau du find que je pipe dans le while mais je ne vois pas pourquoi cela ne fonctionnerait pas ... et je ne vois pas de manière de faire autrement si j'ai des fichiers avec des espaces.
Merci
Mildred
# sous shell
Posté par sylvain cresto (site web personnel) . Évalué à 2.
Le while do ... done lance un sous shell, la variable tab affecté dans ce sous shell n'est pas accessible en dehors, dans ton exemple c'est une nouvelle variable non initialisé qui est passé à la fonction display.
Regarde http://abs.traduc.org/abs-4.2.01-fr/ch20.html pour plus d'info.
En dehors de ça la syntaxe semble correcte.
# Mon idée
Posté par dguihal . Évalué à 5.
Bilan, dès que tu sors de la boucle, ton tableau est vide.
Je suis régulièrement confronté à ce problème et la manière de le contourner est celle-ci :
[^] # Re: Mon idée
Posté par Mildred (site web personnel) . Évalué à 2.
Je me doutais bien qu'il avait une histoire de sous-shell par derrière mais je ne savais pas comment m'en sortir, ta solution a été la bonne.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.