Simplemente pase su cadena a su función:
function my_function
{
while test $# -gt 0
do
echo "do something with $1"
shift
done
}
my_string="cat
dog
bird"
my_function $my_string
te da:
do something with cat
do something with dog
do something with bird
Y si realmente le importa que se tomen otros espacios en blanco como separadores de argumentos, primero configure su IFS
:
IFS="
"
my_string="cat and kittens
dog
bird"
my_function $my_string
para obtener:
do something with cat and kittens
do something with dog
do something with bird
No olvides unset IFS
después de eso.
Use esto (es un ciclo de lectura de cada línea del archivo file
)
cat file | while read -r a; do echo $a; done
donde el echo $a
es lo que quieras hacer con la línea actual.
ACTUALIZACIÓN:de los comentaristas (¡gracias!)
Si no tiene un archivo con varias líneas, pero tiene una variable con varias líneas, use
echo "$variable" | while read -r a; do echo $a; done
ACTUALIZACIÓN2:"read -r
" se recomienda deshabilitar la barra invertida (\
) interpretación de caracteres (verifique los comentarios de mtraceur; compatible con la mayoría de los shells). Está documentado en POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html
De forma predeterminada, a menos que se especifique la opción -r, <backslash>
actuará como un personaje de escape. .. Se admite la siguiente opción:-r
- No tratar un <backslash>
personaje de alguna manera especial. Considere cada uno como parte de la línea de entrada.