Portál AbcLinuxu, 9. května 2025 19:19

Dotaz: čtení

26.3.2016 17:04 Tomáš
čtení
Přečteno: 1247×
Odpovědět | Admin
Zdravím, narazil jsem na menší problém u cyklu for. Mám vstupní data a já bych je chtěl přečíst po řádcích, ale cyklus for mi to nečte po řádcích, ale když narazí na mezeru, tak mi pošle řetězec. Děkuji za odpovědi
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.3.2016 17:41 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: čtení
Odpovědět | | Sbalit | Link | Blokovat | Admin

Tak je to správně, tak to má fungovat. Pokud chcete zpracovávat text po řádcích, použijte cyklus while s příkazem read, např:

i=0
while read; do
    printf "%6d: %s\n" $[++i] "$REPLY"
done <file
26.3.2016 17:56 Tomáš
Rozbalit Rozbalit vše Re: čtení
Díky za odpověď a jak by to vypadlo kdybych tomu chtěl předat samotný řetězec nebo výstup z nějakých příkazů? Jsem začátečník a bash se mi jeví trochu zběsile a tak se v něm tolik ještě nevyznám.
26.3.2016 18:11 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: čtení

Ten cyklus se chová jako složený příkaz, který se dá použít i s rourou:

who | while read; do
    ....
done

Jen v případě, že potřebujete, aby tělo cyklu mohlo měnit proměnné tak, aby se to projevilo i mimo cyklus, je potřeba použít trik popsaný tady.

pro konkrétní řetězec lze použít konstrukci

... <<<"string"
nebo tradiční
echo "string" | ...

ale spolu se zpracováním po řádcích to moc smysl nedává.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.