J'ai une variable de sources qui est essentiellement une chaîne d'éléments séparés par des virgules:
SOURCES="a b c d e"
Je veux que l'utilisateur entre une destination pour chacune de ces sources, et je veux donc stocker cette entrée dans une chaîne ressemblant à celle ci-dessus mais contenant les destinations. Si je veux assigner a = 1, b = 2 ... etc, j'aurais quelque chose comme ceci:
echo $DESTINATIONS >>> "1 2 3 4 5"
Pour faire ce qui précède, je fais ceci:
SOURCES="a b c d e"
DESTINATIONS=""
for src in $SOURCES
do
echo Input destination to associate to the source $src:
read dest
DESTINATIONS=$DESTINATIONS $dest
done
Cependant, si je fais une echo
sur $DESTINATIONS
, je la trouve vide. De plus, à chaque boucle, mon shell me dit:
-bash: = **myInput**: command not found
Une idée où je vais mal?
SOURCES="a b c d e"
DESTINATIONS=""
for src in $SOURCES
do
echo Input destination to associate to the source $src:
read dest
DESTINATIONS+=" ${dest}"
done
echo $DESTINATIONS
travaille pour moi.
Vous devriez utiliser un tableau, pas une chaîne délimitée.
sources=(a b c d e)
for src in "${sources[@]}"
do
read -p "Input destination to associate to the source $src" dest
destinations+=( "$dest" )
done
printf '%s\n' "${destinations[@]}"
Le problème le plus évident avec votre code est cette ligne:
DESTINATIONS=$DESTINATIONS $dest
La ligne ci-dessus devrait plutôt être écrite:
DESTINATIONS="$DESTINATIONS $dest"
Le problème: Vous exécutez $ dest et passez dans un environnement de DESTINATIONS = $ DESTINATIONS. J'espère que cela explique les messages d'erreur que vous voyez.
J'ai essayé votre code avec les citations que j'ai suggérées et cela fonctionne bien.
Q: Qu'est-ce qui ne va pas?
R: Ne pas utiliser de guillemets si nécessaire.
Si vous utilisez un espace non-cité, il sera utilisé par Shell pour scinder la ligne.
Quand vous utilisez:
DESTINATIONS=$DESTINATIONS $dest
Le shell comprend la variable $ dest comme une commande à exécuter, c’est pourquoi vous obtenez le message d'erreur:
-bash: = **myInput**: command not found
Pour résoudre le problème, citez simplement l'espace.
Il y a plusieurs façons de le faire:
DESTINATIONS=$DESTINATIONS" "$dest
DESTINATIONS=$DESTINATIONS' '$dest
DESTINATIONS="$DESTINATIONS"' '"$dest"
DESTINATIONS="$DESTINATIONS $dest"
La dernière option est probablement la plus simple et la meilleure dans l’ensemble.
Vous pouvez aussi utiliser cette syntaxe (depuis bash 3.1-alpha1):
DESTINATIONS+=" $dest"
Aussi, s'il vous plaît !, citez vos autres extensions:
echo "$DESTINATIONS"