Passez simplement votre chaîne à votre fonction :
function my_function
{
while test $# -gt 0
do
echo "do something with $1"
shift
done
}
my_string="cat
dog
bird"
my_function $my_string
vous donne :
do something with cat
do something with dog
do something with bird
Et si vous tenez vraiment à ce que d'autres espaces blancs soient pris comme séparateurs d'arguments, définissez d'abord votre IFS
:
IFS="
"
my_string="cat and kittens
dog
bird"
my_function $my_string
pour obtenir :
do something with cat and kittens
do something with dog
do something with bird
N'oubliez pas de unset IFS
après ça.
Utilisez ceci (c'est une boucle de lecture de chaque ligne du fichier file
)
cat file | while read -r a; do echo $a; done
où le echo $a
est ce que vous voulez faire avec la ligne actuelle.
MISE À JOUR :des commentateurs (merci !)
Si vous n'avez pas de fichier avec plusieurs lignes, mais que vous avez une variable avec plusieurs lignes, utilisez
echo "$variable" | while read -r a; do echo $a; done
MISE À JOUR2 :"read -r
" est recommandé de désactiver la barre oblique inverse (\
) interprétation des caractères (vérifiez les commentaires de mtraceur ; pris en charge dans la plupart des shells). Il est documenté dans POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html
Par défaut, sauf si l'option -r est spécifiée,
<backslash>
agira comme un caractère d'échappement. .. L'option suivante est supportée :-r
- Ne pas traiter un<backslash>
caractère d'une manière particulière. Considérez chacun comme faisant partie de la ligne d'entrée.