linux之eval用法(高級bash程序員的必修之技)


1. eval command-line

其中commandline是在終端上鍵入的一條普通命令行。然而當在它前面放上eval時,其結果是shell在執行命令行之前掃描它兩次。如:

pipe="|"

eval ls $pipe wc -l

shell1次掃描命令行時,它替換出pipe的值|,接着eval使它再次掃描命令行,這時shell把|作為管道符號了。

如果變量中包含任何需要shell直接在命令行中看到的字符(不是替換的結果),就可以使用eval。命令行結束符(; &),Io重定向符(< >)和引號就屬於對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

---------------------------------------------------------------------------------------------------------------------------------------------

 

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

 

 

shell 也提供了 eval 命令,如同熟悉的其他腳本語言,會將它的參數做為命令執行,初看會疑惑為什么shell要提供兩種動態執行命令字串的機制,但是經過仔細分析,才發現shell的eval同其他語言有很大區別。

1.shell 中的函數雖然可以通過return 返回,但是這里的return 相當於 exit,只能是個狀態值用於測試,而不能像其它語言一樣返回復雜的結果,其處理結果只能通過輸出到標准輸出經過 `` ,$()取得。

http://blog.chinaunix.net/uid-21411227-id-1826706.html

http://blog.sina.com.cn/s/blog_a7b22c930101tgw6.html


免責聲明!

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



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