130 votes

Boucler sur des tuples en bash ?

Est-il possible de boucler sur des tuples en bash ?

À titre d'exemple, ce serait formidable si les éléments suivants fonctionnaient :

for (i,j) in ((c,3), (e,5)); do echo "$i and $j"; done

Existe-t-il une solution de contournement qui me permette de boucler sur les tuples ?

7 votes

Je viens d'un milieu python et cette question est très utile !

5 votes

En regardant ceci quatre ans plus tard, je me demande s'il n'y a toujours pas de meilleure façon de faire. omg.

0 votes

Presque 8 ans plus tard, je me suis également demandé s'il n'y avait toujours pas de meilleure façon de procéder. Mais cette réponse de 2018 me semble plutôt bonne : stackoverflow.com/a/52228219/463994

1voto

bluenote10 Points 1932

Dans les cas où mes définitions de tuple sont plus complexes, je préfère les avoir dans un heredoc :

while IFS=", " read -ra arr; do
  echo "${arr[0]} and ${arr[1]}"
done <<EOM
c, 3
e, 5
EOM

Cela combine boucler sur les lignes d'un heredoc avec séparation des lignes à un caractère de séparation souhaité .

0voto

dtmilano Points 26472

Un peu plus compliqué, mais peut être utile :

a='((c,3), (e,5))'
IFS='()'; for t in $a; do [ -n "$t" ] && { IFS=','; set -- $t; [ -n "$1" ] && echo i=$1 j=$2; }; done

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X