J'ai besoin de passer d'une chaîne à un tableau où chaque entrée correspond à chaque mot de cette chaîne. Par exemple, en commençant par:
VotePedro="Vote for Pedro"
J'ai besoin du tableau:
Vote
For
Pedro
Je devrais ensuite pouvoir répéter:
for i in "${votePedroArray[@]}"
do
## Do something
done
bash
shell-script
string
array
farid99
la source
la source
votePedroArray=("Vote" "For" "Pedro")
, vous obtiendrez un tableau de longueur 3. Et${VotePedro}
est le même que$VotePedro
dans ce contexte. Pour accéder aux éléments de tableau individuels, vous pouvez utiliser des crochets similaires à ceux que vous aviez pour la boucle for dans votre question. par exemple,${votePedroArray[0]}
est le premier élément du tableau ("Votez" pour cet exemple)Lorsque vous laissez une expansion variable sans guillemets, par exemple
$VotePedro
, les étapes suivantes sont effectuées:IFS
variable; par défaut, c'est l'espace, la tabulation et la nouvelle ligne.Ainsi, vous pouvez diviser une chaîne en éléments délimités par des espaces (en supposant la valeur par défaut de
IFS
) en désactivant l'expansion générique et en développant une variable dont la valeur est cette chaîne en dehors des guillemets.Vous pouvez directement effectuer la division au point d'utilisation; cela fonctionnerait même dans des shells tels que sh qui n'ont pas de tableaux:
la source
En plus de le casser
$IFS
, vous pouvez également le casser sur ce que vous voulez:... ce qui permettrait même des champs nuls séparés par des espaces.
la source