linux shell中的eval命令


語法:eval cmdLine

eval會對后面的cmdLine進行兩遍掃描,如果第一遍掃描后,cmdLine是個普通命令,則執行此命令;如果cmdLine中含有變量的間接引用,則保證間接引用的語義。
 
舉例如下:
set 11 22 33 44
如果要輸出最近一個參數,即44,可以使用如下命令,
echo $4
 
但是如果我們不知道有幾個參數的時候,要輸出最后一個參數,大家可能會想到使用$#來輸出最后一個參數,
如果使用命令:
echo "\$$#"
則得到的結果是 $4,而不是我們想要的44。這里涉及到一個變量間接引用的問題,我們的本意是輸出 $4,默認情況下,命令后忽略變量間接引用的情況。
這時候,就可以使用eval命令。
 
eval echo "\$$#"
得到的結果為44
 

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 $#)"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM