轉自:http://blog.csdn.net/w_ww_w/article/details/7075867
eval可讀取一連串的參數,然后再依參數本身的特性來執行。eval是shell內建命令,可用shell查看其用法。參數不限數目,彼此之間用分號隔開。
eval [參數]
eval命令將會首先掃描命令行進行所有的置換,然后再執行該命令。該命令適用於那些一次掃描無法實現其功能的變量。該命令對變量進行兩次掃描。這些需要進行兩次掃描的變量有時被稱為復雜變量。不過這些變量本身並不復雜。eval命令也可以用於回顯簡單變量,不一定是復雜變量。
1. eval命令也可以用於回顯簡單變量,不一定是復雜變量
例如:
[neau@mail ~]$ NAME=VALUEBANK
[neau@mail ~]$ eval echo $NAME
VALUEBANK
[neau@mail ~]$ echo $NAME
VALUEBANK
2 . 執行含有字符串的命令
首先我們首先創建一個名為test的小文件,在這個小文件中含有一些文本。接着,將cat test賦給變量myfile,現在我們e c h o該變量,看看是否能夠執行上述命令。
[neau@mail ~]$ vi test
[neau@mail ~]$ cat test
Hello World!!!
I am a chinese Boy!
將cat testf賦給變量myfile
[neau@mail ~]$ myfile="cat test"
如果我們e c h o該變量,我們將無法列出t e s t 文件中的內容。
[neau@mail ~]$ echo $myfile
cat test
讓我們來試一下e v a l命令,記住e v a l命令將會對該變量進行兩次掃瞄。
[neau@mail ~]$ eval $myfile
Hello World!!!
I am a chinese Boy!
從上面的結果可以看出,使用e v a l命令不但可以置換該變量,還能夠執行相應的命令。第
一次掃描進行了變量置換,第二次掃描執行了該字符串中所包含的命令cat test。
3. 命令還可以用來顯示出傳遞給腳本的最后一個參數
[neau@mail ~]$ cat test1
#!/bin/bash
echo "Total of the arguments passed $#"
echo "The process Id is $$"
echo "Last argument os "$(eval echo \$$#)""
[neau@mail ~]$ ./test1 value bank test last
Total of the arguments passed 4
The process Id is 21545
Last argument os last
在上面的腳本中, e v a l命令首先把$ $ #解析為當前s h e l l的參數個數,然后在第二次掃描時
得出最后一個參數。
4. 給每個值一個變量名
可以給一個值一個變量名。下面我對此做些解釋,假定有一個名為test2的文件:
[neau@mail ~]$ cat test2
CCTV 5
CHANGEL SPORTS
LIKE YES
你希望該文件中的第一列成為變量名,第二列成為該變量的值,這樣就可以:
[neau@mail ~]$ cat test2
COMMANY TQ
LANGUE ENGLISH
LIKE YES
[neau@mail ~]$ cat test3
#!/bin/bash
while read NAME VALUE
do
eval "${NAME}=${VALUE}"
done <test2
echo "$COMMANY $LANGUE $LIKE"
[neau@mail ~]$ ./test3
TQ ENGLISH YES
參考:
http://www.cnblogs.com/huzhiwei/archive/2012/03/14/2395956.html
http://www.runoob.com/linux/linux-comm-eval.html 菜鳥教程