#1 Le 10/03/2023, à 15:43
- Tawal
[Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
Hello,
Pas sûr que le titre soit clair.
Soit le tableau :
Tab=( [1]=a [2]=b [4]=d [6]=f )
Comment le parcourir à l'envers ?
Tout en sachant, que dans mon cas le tableau est rempli dynamiquement.
Je ne connais pas l'indice maximum, ni où sont les trous dans les indices.
Je connais le nombre d'éléments : ${#Tab[@]}
J'ai trouvé cette solution :
$ for i in $(rev <<<"${!Tab[@]}"); do echo "${Tab[i]}"; done
f
d
b
a
$
Mais peut-être y a-t-il quelque chose de mieux qu'un outil externe ?
Edit:
Au regard de la solution que je propose, ma question serait plutôt : Comment inverser la chaîne ${!Tab[@]} ?
En bash évidemment, sinon rev est adéquat.
Merci de votre aide.
Dernière modification par Tawal (Le 10/03/2023, à 19:24)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#2 Le 10/03/2023, à 18:13
- erresse
Re : [Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
Bonjour,
Si tu mets en tableau les index de ton tableau initial rempli dynamiquement, tu auras le même nombre d'éléments mais chacun contiendra l'index réel où est enregistré la valeur initiale. Je m'explique :
Tab=( [1]=a [2]=b [4]=d [6]=f )
idx=( ${!Tab[@]} )
for ((i=${#idx[@]}-1; i >= 0 ; i--)); do echo "${Tab[${idx[i]}]}"; done
Ça devrait le faire, non ?
Edit: Sans guillemets inutiles, comme le préconise Watael, alors...
Dernière modification par erresse (Le 10/03/2023, à 18:44)
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#3 Le 10/03/2023, à 18:32
- Watael
Re : [Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
ça devrait le faire, oui.
MAIS
les guillemets sont inutiles dans le contexte arithmétique, où on ne traite que des nombres qui ne peuvent pas contenir d'espaces.
idem pour la récupération des indices d'un tableau.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 10/03/2023, à 19:22
- Tawal
Re : [Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
Carrément que ça le fait.
Ça va m'éviter une commande externe.
Super.
Merci.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#5 Le 10/03/2023, à 20:32
- Tawal
Re : [Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
Re,
shellcheck klaxonne :
idx=( ${!LogFich[*]} )
^------------^ SC2206: Quote to prevent word splitting/globbing, or split robustly with mapfile or read -a.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#6 Le 10/03/2023, à 20:45
- kamaris
Re : [Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
idx=( "${!LogFich[@]}" )
Hors ligne
#7 Le 10/03/2023, à 20:47
- Watael
Re : [Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
c'est normal.
« il faut toujours mettre les Développements de paramètres entre guillemets. TOUJOURS !
à moins de savoir pourquoi. »
shellcheck, lui, ne sait pas pourquoi.
NB : avec un tableau associatif, dont les indices peuvent contenir des espaces (entre autres caractères de l'IFS), il aurait en effet fallu mettre des guillemets.
edit: et kamaris non plus
Dernière modification par Watael (Le 10/03/2023, à 20:47)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 10/03/2023, à 21:11
- Tawal
Re : [Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
Oui, c'est pour ça que je n'ai pas mis de guillemets doubles.
Et j'ai placé un
# shellcheck disable=SC2206
avant l'affectation du tableau idx.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#9 Le 10/03/2023, à 21:12
- Watael
Re : [Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
donc, il ne couine plus ?!
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 10/03/2023, à 21:19
- Tawal
Re : [Résolu][Bash] Parcourir à l'envers un tableau indicé à trous
Non, un commentaire de la sorte désactive l'erreur pour la ligne du dessous.
Pour un effet global sur tout le script, il faut placer ce commentaire avant toute commande du script.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne