и еще раз к вопросу о пользе чтения man-ов
eval считается крайне уязвимой конструкцией, особенно на произвольных данных. дескать, подставь ; и лепи себе дальше патчи бармина, сколько душе угодно.
оно то так, но есть в bash одна очень приятная штука для борьбы с этим злом – расширитель @. позволяет экранировать всякую каку без особых извратов с echo/sed/perl/whatever
итак, маленький примерчик
(victor@ksakep)~ $> cat t.sh
#! /bin/bash
str="test ; echo test2"
eval echo $str
eval echo ${str@Q}
(victor@ksakep)~ $> ./t.sh
test
test2
test ; echo test2
(victor@ksakep)~ $>
в первом случае echo после точки с запятой отработалась как еще одна команда, т.е. конструкция уязвима
во втором – строка была выведена как задумывалось изначально.
ну а за подробностями возможных аргументов расширителя @ – в man bash