常用命令-eval簡析

來源:互聯網
上載者:User


常用命令-eval簡析 1. 工作原理及用法  www.2cto.com  用法:eval command-line原理:eval主要用在對參數的特殊處理上面的,一般的命令列,shell處理參數就只執行一遍,像轉義和變數轉變;但加上eval後就可以對參數經行兩遍處理;網上有說是對command-line處理兩遍,我認為是不合理的。一個eval只能使shell對參數多一次處理,因此有幾個eval就可以多加幾次,即eval eval command-line 這樣就能對參數進行三次編譯,但此時應特別注意參數的轉義,下面有例子說明。 eval命令會計算(evalue)它的參數,這些參數作為運算式計算後重新組合為一個字串,然後作為一個命令被執行。eval最常見的用法是將動態產生的命令列計算並執行。例如:$ name=woodie$ cmd="echo Helllo $name\! "$ eval $cmdHello woodie! 2. 舉例講解例一:(網路下載)pipe="|"eval ls $pipe wc -lshell第1次掃描命令列時,它替換出pipe的值|,接著eval使它再次掃描命令列,這時shell把|作為管道符號了。如果變數中包含任何需要shell直接在命令列中看到的字元(不是替換的結果),就可以使用eval。命令列結束符(; | &),I/o重新導向符(< >)和引號就屬於對shell具有特殊意義的符號,必須直接出現在命令列中。x=100ptrx=xeval echo \$$ptrx 指向ptrx,用這裡的方法可以理解b中的例子100 列印100eval $ptrx=50 將50存到ptrx指向的變數中。echo $x50 列印50例二:root@localhost:~/test#set tao shou kun root@localhost:~/test#echo \$$#$3root@localhost:~/test#eval echo \$$#kunroot@localhost:~/test#例三:(對三重的支援)root@localhost:~/test#aabbcc=alibabaroot@localhost:~/test#a=aaroot@localhost:~/test#b=bbroot@localhost:~/test#c=ccroot@localhost:~/test#alibaba="hello world"root@localhost:~/test#eval echo \$\$$a$b$c11990aabbccroot@localhost:~/test#eval echo \\$\$$a$b$c$alibabaroot@localhost:~/test#eval eval echo \$\$$a$b$c11990aabbccroot@localhost:~/test#eval eval echo \\$\$$a$b$chello world注意這裡的參數轉義,第一遍處理後參數應該是:\$$aabbcc,第二次是:$alibaba,第三次就正好是:hello world。 附eval用法三例(網路收集):例一:#尋找合符條件的變數名,然後將該變數的值賦予另一變數v1=aaav2=bbbc=1if [ $c -eq 1 ]thenvname=v$c #找到合格變數名為v1eval vvv="$"$vname ; echo vvv: $vvv #將變數v1的值賦予vvv,即,使vvv=aaaeval vvv='$'$vname ; echo vvv: $vvv #將變數v1的值賦予vvv,即,使vvv=aaa#eval vvv=$$vname ; echo vvv: $vvv #錯誤用法fi #例二:#以變數v1的值aaa作為變數名,將變數vaaa的值賦予這一新定義的變數aaav1=aaa ; vaaa="This is aaa"#eval $v1=$vaaa ; echo aaa: $aaa #錯誤用法#eval $v1="$vaaa" ; echo aaa: $aaa #錯誤用法eval $v1='$vaaa' ; echo aaa: $aaa #例三:#以變數v1的值aaa作為變數名,並將變數名字串作為值賦予自身v1=aaa ; vaaa="This is aaa"eval $v1=$v1 ; echo aaa: $aaa #與例二的錯誤用法不同,這一用法是正確的eval $v1="$v1" ; echo aaa: $aaa #與例二的錯誤用法不同,這一用法是正確的eval $v1='$v1' ; echo aaa: $aaa 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.