Ha nincs eval, akkor az 'a' változó értéke egy string lesz, ami
('érték0' 'érték1' 'érték2' )
szerkezetű, de ez csak egy string. Nekünk viszont az kell, hogy a shell kifejtse ezt, mintha leírtuk volna így, mint tömb definíciót:
a=('érték0' 'érték1' 'érték2' )
Igazad van abban, hogy a pipe után nem kell a backslash. Azért írtam, hogy egy sorban legyen a while-lal, a newline karaktert ignorálja. Valahogy az volt bennem, egy sorba írnám, de az átláthatóság miatt mégis több sorban írom.
Általában akartam megmutatni, hogy pipe-ból, azaz másik process-ből, elszeparált memóriaterületről bash-ben hogyan lehet több változót kihozni a szülő shellhez. Azért választottam az ls -l parancsot, hogy az eredményben legyenek szóközök is, s látszodjék, a szóközöket tartalmazó értékek átadása is sikeres. Persze, hogy az, hiszen a $REPLY köré tettem literális aposztrofokat, amelyek az eval kapcsán a shelltől teljes elzárásként fog értelmeződni, persze mindez már a $REPLY helyettesítésének megtörténte után.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE