Just to be clear for those who might not understand what's going on, read doesn't return the variable - it returns the quoted version of the symbol name. So the following 3 lines return the same thing:
Note read only does this for the 1st form found in the string. A form can be a string (if escape quoted), a number (int/float), a symbol or a list:
(read "1 2 3") ; Returns 1 (read "var1 var2 var3") ; Returns VAR1 (read "(var1 var2 var3)") ; Returns (VAR1 VAR2 VAR3)
In all cases the returned value is unevaluated.
Eval then takes the quoted symbol (or for that matter any Lisp syntax) and evaluates it to its result as if run.
So you get the following happening:
(eval ; Will evaluate the following argument, then returns the result (read ; Convert a string into a Lisp form to evaluate and returns this form "trail_1" ; There's just this symbol as text, anything after it will be ignored
) ; returns TRIAL_1, not the value inside it, but the quoted symbol
) ; returns the value inside the TRIAL_1 symbol