Bonjour,

j'ai une chaine de caractères où le séparateur est ';' et pouvant contenir des espaces significatives, par exemple "a;b c;d;e".

Je voudrais faire une boucle dans laquelle une variable prendrait successivement les valeurs "a" "b c" "d" "e".

Je sais le faire en awk:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$ echo "a;b c;d;e" | awk -F';' '{for (nf = 1; nf < NF; nf++) { x=$nf; print "-" x "-" }}'
-a-
-b c-
-d-
Je voudrais savoir s'il est possible de le faire avec un très vieux bash 3.2.57 de 2007, par exemple, en transférant la chaîne dans un tableau indexé, mais en utilisant un séparateur ';' et non espace.

J'ai essayé toutes sortes de choses avec declare -a tab. À un moment je pensais avoir trouvé avec ceci qui imprime bien le tableau... mais qui n'a qu'un seul élément:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
$ tab=($(printf "a;b c;d;e" | tr ';' '\n'))
 
$ printf '%s\n' "${tab[@]}"
a
b c
d
e
 
$ echo "${#tab[@]}"
1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$ echo "a;b c;d;e" | read -d ';' -a tab
 
$ echo "${#tab[@]}"
0
Si quelqu'un a une idée, je suis preneur.