When learning (or teaching) eval, the first - and very valuable - example of it is to see eval's ability to evaluate the value of the last positional parameter:
$ set a b c d
$ eval print -- \$$#
d
We use eval it to force the shell to perform a double scan, when we need to find a value of a value. First scan will evaluate the $# to the number of available parameters (in this case: 4); the second scan will check the value of it (d). This is 'bread and butter' of eval application.
Other cases of using eval are a bit more obscure, and for that reason eval is often forgotten...
Here is an example that is not 'that' obscure - and possible quite useful. A delegate wanted to rename all files in a given directory, to change the character case from lower to upper. What he devised, successfully, is as follows:
for file in *
do
mv $file $(echo $file | tr '[a-z]' '[A-Z]')
done
This worked, until he found that some of the files contained 'unfriendly' characters: spaces. The script failed to cope with this.
This is where eval stepped in:
for file in *
do
eval mv '"$file"' \"$(echo "$file" | tr '[a-z]' '[A-Z]' )\"
done
In this case eval allows to insert an additional set of double quotes, which protected spaces embedded in file names.
Twitter Updates
G-AVLN in front of her home
Mostly Unix and Linux topics. But flying might get a mention too.
Subscribe to:
Post Comments (Atom)
Blog Archive
- October (1)
- June (1)
- April (2)
- February (3)
- June (1)
- March (1)
- August (3)
- July (2)
- June (1)
- March (1)
- June (3)
- May (1)
- April (5)
- February (1)
- January (5)
- October (1)
- September (3)
- July (4)
- June (5)
- April (3)
- March (1)
- February (3)
- January (3)
- October (7)
- August (2)
- July (3)
- May (1)
- November (4)
- October (1)
- September (1)
- August (2)
- July (2)
- June (3)
- May (3)
- April (2)
- March (2)
- February (3)
- January (1)
- December (2)
- November (1)
- October (6)
- September (6)
- August (1)
- July (2)
- June (8)
- May (3)
- April (4)
- March (3)
No comments:
Post a Comment