Stačí předat svůj řetězec své funkci:
function my_function
{
while test $# -gt 0
do
echo "do something with $1"
shift
done
}
my_string="cat
dog
bird"
my_function $my_string
vám dává:
do something with cat
do something with dog
do something with bird
A pokud vám opravdu záleží na tom, aby ostatní mezery byly brány jako oddělovače argumentů, nejprve nastavte IFS
:
IFS="
"
my_string="cat and kittens
dog
bird"
my_function $my_string
získat:
do something with cat and kittens
do something with dog
do something with bird
Nezapomeňte unset IFS
poté.
Použijte toto (je to smyčka čtení každého řádku ze souboru file
)
cat file | while read -r a; do echo $a; done
kde echo $a
je to, co chcete dělat s aktuálním řádkem.
AKTUALIZACE:od komentátorů (díky!)
Pokud nemáte žádný soubor s více řádky, ale máte proměnnou s více řádky, použijte
echo "$variable" | while read -r a; do echo $a; done
AKTUALIZACE 2:"read -r
" se doporučuje zakázat zpětné lomítko (\
) interpretace znaků (zkontrolujte komentáře mtraceur; podporováno ve většině shellů). Je to zdokumentováno v POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html
Ve výchozím nastavení, pokud není zadaná volba -r,
<backslash>
bude fungovat jako úniková postava. .. Je podporována následující možnost:-r
- Nezacházejte s<backslash>
charakter nějakým zvláštním způsobem. Považujte každý za součást vstupního řádku.