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 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 résolu, 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 big_smile
les guillemets sont inutiles dans le contexte arithmétique, où on ne traite que des nombres qui ne peuvent pas contenir d'espaces. wink
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.
smile »
shellcheck, lui, ne sait pas pourquoi. cool
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 lol

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