linux shell中的eval命令
語法:eval cmdLine
eval會對后面的cmdLine進(jìn)行兩遍掃描,如果第一遍掃描后,cmdLine是個普通命令,則執(zhí)行此命令;如果cmdLine中含有變量的間接引用,則保證間接引用的語義。
?
舉例如下:
set 11 22 33 44
如果要輸出最近一個參數(shù),即44,可以使用如下命令,
echo $4
但是如果我們不知道有幾個參數(shù)的時候,要輸出最后一個參數(shù),大家可能會想到使用$#來輸出最后一個參數(shù),
如果使用命令:
echo "\$$#"
則得到的結(jié)果是 $4,而不是我們想要的44。這里涉及到一個變量間接引用的問題,我們的本意是輸出 $4,默認(rèn)情況下,命令后忽略變量間接引用的情況。
這時候,就可以使用eval命令。
eval echo "\$$#"
得到的結(jié)果為44
轉(zhuǎn)自:http://www.2cto.com/os/201311/255577.html
?
1.eval命令將會首先掃描命令行進(jìn)行所有的替換,憨厚再執(zhí)行命令。該命令使用于那些一次掃描無法實(shí)現(xiàn)其功能的變量。該命令對變量進(jìn)行兩次掃描。這些需要進(jìn)行兩次掃描的變量有時候被稱為復(fù)雜變量。
2.eval也可以用于回顯簡單變量,不一定時復(fù)雜變量。
NAME=ZONE
eval echo $NAME等價于echo $NAME
3.兩次掃描
test.txt內(nèi)容:hello shell world!
myfile="cat test.txt"
(1)echo $myfile #result:cat test.txt
(2)eval echo $myfile #result:hello shell world!
從(2)可以知道第一次掃描進(jìn)行了變量替換,第二次掃描執(zhí)行了該字符串中所包含的命令
4.獲得最后一個參數(shù)
echo "Last argument is $(eval echo \$$#)"
echo "Last argument is $(eval echo $#)"
?
轉(zhuǎn)自:http://www.cnblogs.com/xdzone/archive/2011/03/15/1984971.html
總結(jié)
以上是生活随笔為你收集整理的linux shell中的eval命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DTS开发记录(序)
- 下一篇: python3 shutil模块