Enumérer des champs avec un vieux bash
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:
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:
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:
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.