Power of Eval
These dynamic languages is able to do variable substitution before execution. With the built-in eval
command, they are able to do two parses before submitting its content to the interpreter for final evaluation.
Here I am showing you an example of how we can make use of eval
.
In Bourne Shell, we need to do the following for number counting. It is almost a standard template you will see in script.
count=0 count=`expr $count + 1`
With eval
, we are able to generalise the above template into a re-usable function. The function incr
is able to take variable name as first argument and optional second argument as the step for increment (default is 1). Below shows how the function incr
can apply to variables "counter1" and "counter2":
$incr() { eval $1=\`expr \$\{$1:-0\} + ${2:-1}\`; } $echo $counter1 $incr counter1 $echo $counter1 1 $incr counter1 5 $echo $counter1 6 $incr counter2 4 $incr counter2 5 $echo $counter2 9
When you run incr counter1
, the incr
function will change the definition to
incr() { counter1=`expr $counter1 + 1`; }
.
Similar for counter2 and other variables. Now we are able to increment any variable without having to use the standard template. I hope you can see the power of eval from this simple example.
Labels: shell script
0 Comments:
Post a Comment
<< Home