next up previous contents
Next: exec Up: 內建命令 Previous: : magic numbers與註解   Contents

eval與脫逃字元

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