и еще раз к вопросу о пользе чтения 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