Diviser une variable en plusieurs variables

Langage : BASH

Bonjour !

Je coince sur un problème qui vous semblera peut-être évident :119

J’ai une variable $FRUIT (je simplifie, je ne m’amuse pas avec des fruits hein :mrgreen: ) qui contient une chaîne de caractère de la forme :

echo $FRUIT "fraise""pomme""raisin""poire"

Je souhaiterai à partir de cette variable avoir autant de variables que de FRUIT.
Sachant que le nombre de fruits est variable lui aussi…

Toujours dans cet exemple j’aimerai donc qu’il en découle 5 variables correspondant à :

echo $fruit1 "fraise" echo $fruit2 "pomme" echo $fruit3 "raisin" echo $fruit4 "poire"

MERCI d’avance si vous pouvez m’aider :pray:

J’ai trouvé ça :

$ v='"fraise""pomme""raisin""poire"' $ tab=( ${v//\"/ } ) $ printf "%s\n" "${tab[@]}" fraise pomme raisin poire $ printf "%s\n" "${tab[0]}" fraise

Merci !! :023

Bon ça ne passe pas car j’ai oublier une précision… il peut y avoir des espaces dans les noms des fruits. En fait mes fruits sont des noms de machines virtuelles. Et il y a des espaces dans ces noms.

C’est pour ça qu’à la base je cherchais un genre de fonction qui m’envoie dans des variables tout ce qui se trouve entre deux motifs “”

Dans ce cas il faut jouer avec les séparateurs de champs (variable [mono]IFS[/mono]).

FRUITS1='"fra ise""pom me""rai sin""poi re"' OLD_IFS="$IFS" IFS=' ' FRUITS2=( ${FRUITS1//\"/ } ) IFS="$OLD_IFS" printf "%s\n" "${FRUITS2[@]}"
Résultat :

fra ise pom me rai sin poi re
Note : y’a sûrement moyen d’éviter que les lignes [mono]IFS=…[/mono] et [mono]FRUITS2=…[/mono] ne soient sur deux lignes, en échappant le retour chariot, mais [mono]\n[/mono] ne fonctionne pas et j’ai la flemme de chercher.

Ou alors…

FRUITS1='"fra ise""pom me""rai sin""poi re"' FRUITS2="$(<<< "$FRUITS1" sed 's@"@\n@g' | grep -vFx '')" echo "$FRUITS2" | while read -r FRUIT; do echo "$FRUIT" done
(mais là ce n’est plus dans des variables directement accessibles, il faut passer par la boucle [mono]while[/mono])

Merci à tous pour votre aide !!

J’ai procédé de la sorte :

[code]$ echo “${var2}”
“fraise” “pomme rouge” “raisin” “poire williams”

$ echo -e “${var2//” “/”\n"}"
“fraise”
“pomme rouge”
“raisin”
“poire williams”

$ mapfile -t fruit < <(echo -e “${var2//” “/”\n"}")

$ echo “${#fruit[@]}”
4

$ echo “${fruit[1]}”
“pomme rouge”

$ echo “${fruit[0]}”
“fraise”

$ echo “${fruit[3]}”
“poire williams”[/code]

Merci pour votre temps :023