Clarify (and improve) the escaping used in getconf.
authorMatthijs Kooijman <matthijs@stdin.nl>
Wed, 17 Mar 2010 21:42:44 +0000 (22:42 +0100)
committerMatthijs Kooijman <matthijs@stdin.nl>
Fri, 19 Mar 2010 20:40:15 +0000 (21:40 +0100)
The code is effectively identical, but a bit clearer. The comment above
it should now make it clear what eval is seeing exactly.

lib/tools.in

index 888dad133b627b3bd0d4a12f565609d8c127b40f..a6dcf269ef2dfb6592b7247a779f6176ccaf8463 100644 (file)
@@ -53,8 +53,9 @@ function getconf() {
    # 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
 }