Übergeben Sie einfach Ihren String an Ihre Funktion:
function my_function
{
while test $# -gt 0
do
echo "do something with $1"
shift
done
}
my_string="cat
dog
bird"
my_function $my_string
gibt Ihnen:
do something with cat
do something with dog
do something with bird
Und wenn es Ihnen wirklich wichtig ist, dass andere Leerzeichen als Argumenttrennzeichen verwendet werden, setzen Sie zuerst Ihren IFS
:
IFS="
"
my_string="cat and kittens
dog
bird"
my_function $my_string
zu bekommen:
do something with cat and kittens
do something with dog
do something with bird
Vergessen Sie nicht unset IFS
danach.
Verwenden Sie dies (es ist eine Schleife zum Lesen jeder Zeile aus der Datei file
)
cat file | while read -r a; do echo $a; done
wo die echo $a
ist, was Sie mit der aktuellen Zeile machen möchten.
UPDATE:von Kommentatoren (danke!)
Wenn Sie keine Datei mit mehreren Zeilen, aber eine Variable mit mehreren Zeilen haben, verwenden Sie
echo "$variable" | while read -r a; do echo $a; done
UPDATE2:"read -r
" wird empfohlen, Backslashes zu deaktivieren (\
) Zeicheninterpretation (überprüfen Sie mtraceur-Kommentare; wird in den meisten Shells unterstützt). Es ist in POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html
Standardmäßig, sofern die Option -r nicht angegeben ist, <backslash>
soll als Fluchtzeichen fungieren. .. Folgende Option wird unterstützt:-r
- Behandeln Sie keine <backslash>
Charakter in irgendeiner besonderen Weise. Betrachten Sie jeden als Teil der Eingabezeile.