Чтобы получить представление о том, что на самом деле будет запускаться при eval
некоторой строки, попробуйте сначала echo
ее. eval
-ing это похоже на копирование вывода echo
в оболочку и выполнение этого:
echo "test2"="'Test Name's Test'"
test2='Test Name's Test'
Там есть три одинарные кавычки, которые никогда не запустятся. А так как вы не можете включить одиночные кавычки в Bash одиночных кавычек (она даже не поддерживает обратную косую черту вытекающей, в отличии от многих других языков), вы должны будете использовать двойные кавычки , если вы хотите eval
что - то вроде этого:
echo "test2"="\"Test Name's Test\""
test2="Test Name's Test"
Но , как @daniel указал, eval
ненужно. И вы ни в коем случае не должны использовать eval
. Единственный случай, когда я видел полезный eval
это вывод getopt
.