1.eval命令將會首先掃描命令行進行所有的替換,憨厚再執行命令。該命令使用於那些一次掃描無法實現其功能的變量。該命令對變量進行兩次掃描。這些需要進行兩次掃描的變量有時候被稱為復雜變量。
2.eval也可以用於回顯簡單變量,不一定時復雜變量。
NAME=ZONE
eval echo $NAME等價於echo $NAME
3.兩次掃描
test.txt內容:hello shell world!
myfile="cat test.txt"
(1)echo $myfile #result:cat test.txt
(2)eval echo $myfile #result:hello shell world!
從(2)可以知道第一次掃描進行了變量替換,第二次掃描執行了該字符串中所包含的命令
4.獲得最后一個參數
echo "Last argument is $(eval echo \$$#)"
echo "Last argument is $(eval echo $#)"
標題:linux命令eval的用法
鏈接:http://blog.chinaunix.net/uid-21411227-id-1826706.html
標題:linux shell中的eval
鏈接:http://www.2cto.com/os/201311/255577.html
1. eval command-line
其中command-line是在終端上鍵入的一條普通命令行。然而當在它前面放上eval時,其結果是shell在執行命令行之前掃描它兩次。如:
pipe="|"
eval ls $pipe wc -l
shell第1次掃描命令行時,它替換出pipe的值|,接着eval使它再次掃描命令行,這時shell把|作為管道符號了。
如果變量中包含任何需要shell直接在命令行中看到的字符(不是替換的結果),就可以使用eval。命令行結束符(; | &),I/o重定向符(< >)和引號就屬於對shell具有特殊意義的符號,必須直接出現在命令行中。
2. eval echo \$$# 取得最后一個參數
如:cat last
eval echo \$$#
./last one two three four
four
第一遍掃描后,shell把反斜杠去掉了。當shell再次掃描該行時,它替換了$4的值,並執行echo命令
3.以下示意如何用eval命令創建指向變量的“指針”:
x=100
ptrx=x
eval echo \$$ptrx 指向ptrx,用這里的方法可以理解b中的例子
100 打印100
eval $ptrx=50 將50存到ptrx指向的變量中。
echo $x
50 打印50
eval可以讀取一連串的參數,然后按照參數特性來執行。參數數目不限,彼此之間用分號隔開。
eval會對后面的命令進行兩遍掃描,如果第一遍掃描后,命令是個普通命令,則執行此命令;如果命令中含有變量的間接引用,則保證間接引用的語義。也就是說,eval命令將會首先掃描命令行進行所有的置換,然后再執行該命令。因此,eval命令適用於那些一次掃描無法實現其功能的變量。
eval 執行以下兩個步驟:
第一步,執行變量替換,類似與C語言的宏替代;
第二步,執行替換后的命令串。
---------------------
原文:https://blog.csdn.net/her__0_0/article/details/65938894