Basta passare la stringa alla funzione:
function my_function
{
while test $# -gt 0
do
echo "do something with $1"
shift
done
}
my_string="cat
dog
bird"
my_function $my_string
ti dà:
do something with cat
do something with dog
do something with bird
E se ti interessa davvero che altri spazi bianchi vengano presi come separatori di argomenti, prima imposta il tuo IFS
:
IFS="
"
my_string="cat and kittens
dog
bird"
my_function $my_string
per ottenere:
do something with cat and kittens
do something with dog
do something with bird
Non dimenticare di unset IFS
dopodiché.
Usa questo (è un ciclo di lettura di ogni riga dal file file
)
cat file | while read -r a; do echo $a; done
dove echo $a
è quello che vuoi fare con la linea corrente.
AGGIORNAMENTO:dai commentatori (grazie!)
Se non hai un file con più righe, ma hai una variabile con più righe, usa
echo "$variable" | while read -r a; do echo $a; done
UPDATE2:"read -r
" si consiglia di disabilitare la barra rovesciata (\
) interpretazione dei caratteri (controlla i commenti di mtraceur; supportato nella maggior parte delle shell). È documentato in POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html
Per impostazione predefinita, a meno che non sia specificata l'opzione -r,
<backslash>
fungerà da carattere di fuga. .. È supportata la seguente opzione:-r
- Non trattare un<backslash>
carattere in alcun modo speciale. Considera ciascuno come parte della riga di input.