Bash fejtörő - vagy csak nekem!? [MEGOLDVA]

Fórumok

Kedves Fórumozók!

Adott egy fejtörő, amit képtelen vagyok megoldani, pedig biztos, hogy pofon egyszerű.

Adott a következő parancs:
> test=`ps -ef`

Ezt követően megpróbálom kiiratni a változó tartalmát:
> echo $test

A parancs kimenete meg is jelenik, de ömlesztve (enterek nélkül), ami nekem nem túl szerencsés, mivel több dolgot ki kéne szűrnöm a kimenetből. Van valakinek ötlet arra nézve, hogy hogyan lehetne ugyan azt a kimentet kapni az echo hatására, mint ha simán adnám ki a parancsot. Ha a tabok nem is kerülnek vissza, de a sortörések ugyan úgy legyenek.Próbáltam már echo -e, próbáltam a \n-eket cserélni mindenre, de nem jártam sikerrel.

Fontos megemlítenem, hogy a ps -ef csak egy példa volt, ettől lényegesen erőforrás igényesebb feladatot végeztetek el, aminek a kimenetét több szempont szerint kell feldolgoznom. Tehát csak egyszer lehet futtatni. Továbbá a fájlba irkálást is szeretném elkerülni, mert IO kímélően kéne megoldni, mivel a művelet sokszor, sok példányba fut majd.

A segítséget előre is köszönöm!
Üdv:
NoMan

Hozzászólások

szerk.: csakugyan, az echo -e a jobb megoldás

ha tobb sort kell kiiratnod, akkor pl:
cat << __ENDOFDATA
$test
__ENDOFDATA

-szobi.

ha nem túl bonyolult a cucc végső megoldásként változó helyett, használj egy temp fájlt.

Majdnem jó helyen jártál, csak lemaradt az idézőjel:
echo -e "$test"

Ennyire nem misztikus.

Azt kell mindig szem előtt tartani, hogy parancsvégrehajtáskor előbb megtörténik a feloldás (pl., mint itt, változófeloldás) és szavakra tördelés az IFS változó alapján, aztán a kívül lévő idézőjelek levágása, végül maga a parancsvégrehajtás.

Vagyis az echo $test (a test eredetileg többsoros adatot tartalmaz!), mivel az IFS alapértelmezett értéke miatt a test soremelései szóközre változnak, lényegében azt jelenti, hogy
echo elso sor masodik sor harmadik sor
mindez EGY sorban!

Az idézőjelek megmentik a test változó tartalmát a szavakra tördelés mellékhatásaitól, vagyis
echo "$test " esetén
echo 'elso sor
masodik sor
harmadik sor'
fog végrehajtódni.