2008年3月24日 星期一

shell script: eval

今天逛到瘋狂帽客的 shell script 執行結果變指令

#!/bin/bash
## A=100
## ls -l
## free -m
eval "`grep "^## " $0 | sed 's/^## //'`"
echo "A=$A"

從執行結果來看,會顯示出 A=100,但是 A=100 原本是在 comment 符號 # 之後,為什麼會執行?原來是 grep "^##" 把 ## 開頭的程式取出,接著用 sed 置換 ## 。於是 eval 接著就會執行

A=100
ls -l
free -m

最後一列指令印出字元 A 等於變數 A 的值一百。因此輸出:

A=100

shell script 也是要花腦筋的。