2010-10-20 8 views
2

Disons que j'ai une variable qui a des valeurs:boucle avec bash de variables

#!/bin/sh 
    MYVARIABLE="first,second,third" 

    for vars in MYVARIABLE 
    do 
    echo $vars 
    done 

cela ne fonctionne pas au-dessus de ce que je veux, mais il semble bien, cela devrait imprimer first second third sans , I wan't il doit être imprimé sans , des sugestions?

Répondre

9

Utilisez IFS (le séparateur de champ d'entrée) , par exemple.

#!/bin/sh 
MYVARIABLE="first,second,third" 
IFS="," 

for vars in $MYVARIABLE 
do 
    echo $vars 
done 
2
MYVARIABLE="first,second,third" 
IFS="," 
set -- $MYVARIABLE 
for i in ${@}; do echo $i; done 

# you can also use an array in cases where you want to use the values later on 
array=([email protected]) 
for i in ${!array[@]}; do echo ${array[i]}; done 
+0

@ ghostdog74 Je veux que cela fonctionne comme une boucle, pas si je dois écho élément un par un, la taille varie. tnx – London

+0

Existe-t-il un avantage de 'set' sur une simple boucle, comme ar suggère? – Boldewyn

+0

la boucle for à la fin le fait déjà. Les «échos» individuels sont là juste pour montrer comment vous pouvez accéder aux paramètres après avoir défini la variable en utilisant 'set'. – ghostdog74

2

essayer

MYVARIABLE="first,second,third" 

for vars in $(echo $MYVARIABLE | tr "," "\n") 
do 
    echo $vars 
done 

Ou si vous utilisez IFS, ne pas oublier de mettre IFS retour à l'original lorsque vous avez terminé

MYVARIABLE="first,second,third" 

OIFS=$IFS 
IFS="," 
for vars in $MYVARIABLE 
do 
    echo $vars 
done 
IFS=$OIFS 
+0

qu'est-ce que cela signifie remplacer, avec un nouveau caractère de ligne? – London

+0

@London droite, vous pouvez également le remplacer par un espace: "," "" – Arrix

2

Je ne sais pas ce que vous voulez faire avec le contenu de MYVARIABLE, ou comment voulez-vous le remplir, mais une très bonne option pour traiter des données CSV est d'utiliser awk.

Si vous avez juste cette variable à imprimer:

echo $MYVARIABLE | awk 'BEGIN { RS="," }{ print $0 }'

Si vous disposez d'un fichier CSV et que vous devez effectuer le calcul/transformation des données, alors vous devriez laisser awk pour aller chercher la fichier, en utilisant comme someting:

awk 'BEGIN { FS="," ; OFS="\n" } { print $1,$2,$3 }' filename.csv
(c'est juste un ideia, pas vraiment lié à votre question)

Questions connexes