Portál AbcLinuxu, 9. května 2025 21:02
>> cat soubor abc ABD def DEF for STR in `cat soubor`; do echo $STR fone while read STR; do echo $STR done < soubor vystup pri pouziti for: abc ABC def DEF vystup pri pouziti while: abc ABC def DEFJak docilit tehoz co u while pri pouziti for?
Řešení dotazu:
for STR in `cat soubor`
se zmeni na
for STR in abc ABC\ndef DEF
a i pri IFS=\n se mezera bude stale povazovat za delitko a stale se mu to bude rozpadat na ctyri polozky misto na dve, jak pozaduje.
IFS The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is ``<space><tab><newline>''.
Jak docilit tehoz co u while pri pouziti for?To vubec tim FORem neres. Proste pouzij WHILE. Ten ti sam prestane cist, az dorazi na konec souboru.
marek$ echo blabla |while read i; do y=$i; echo $y; done; echo $y blabla marek$ marek$ for i in $(echo blabla); do y=$i; echo $y; done; echo $y blabla blabla marek$
Obavam se ze ma pravdu.
Jinak ten for je samozrejme nebezpecny v tom, ze snadno muzeme pretect max. delku radky.
Marekwhile
, for
, read
...) za pajpou, bash dělá nový process. Ale je to kvůli té pajpě, ne kvůli while
nebo for
.
Řada případů s pajpou se dá také přepsat na případ bez pajpy, ale to jen doplňuji.
`cat subor`
tiez vytvori novy proces, takze rychlostne si nepomozes. Prenos premennych do nadshellu je nieco ine.
V bashi sa da nacitat subor cez $(<subor)
bez noveho procesu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.