Next: exec
Up: 內建命令
Previous: : magic numbers與註解
  Contents
eval可以拿來執行一個命令,不過他最常用的是拿來作兩次變數的代換,
主要是每次執行一個shell
命令他會先evaluate一次,看到有$這個東西的就把值換一次把變數換掉,
然後再執行一遍。這種double scan的方法對一些變數代換很有用,
因為eval不是喚起另一個shell來執行,而是在本來這個shell內多evaluate一次,
所以代換結果可以保留下來。
例如如果我們要兩次代換
count=1
var1=I
var2=am
var3=a
var4=gyoza
while [ $count -lt 5 ]; do
eval "echo \$var$count"
let 'count=count + 1'
done
count可以一直變化1. 2. 3 ....要產生一個新變數var1 var2 var3....然後再對
var1 var2取值。其中因為第一個var不想被運算,所以先用escape字元\
,
然後第二次運算時才被解釋。
那如果要三次以上變數代換在一行內解決呢? 想想看吧。
eval主要還用來evaluate執行一個shell script檔,可以像C一樣寫成很多的
模組shell script在同一個shell下run,則變數在此shell內通通有效。
$ eval ". foo.sh"
不過如果變數太多,名字會打架。
Cyril Huang
2002-06-14