The code is effectively identical, but a bit clearer. The comment above
it should now make it clear what eval is seeing exactly.
# replace * with %, so that it is not globbed.
ret="${ret//\\*/__star__}"
- # this is weird, but single quotes are needed to
- # allow for returned values with spaces. $ret is still expanded
- # because it is in an 'eval' statement.
- eval $1='$ret'
+ # We use escape the $ in $ret to delay expansion of $ret, so when $1
+ # is foo, eval sees foo=$ret and properly does the assignment
+ # (without the backslash, the right part of the assignment would be
+ # whatever is in ret and be subject to all kinds of expansion.
+ eval $1=\$ret
}