shell中的eval命令


轉自:https://blog.51cto.com/10706198/1788573

eval命令用法:

        當我們在命令行前加上eval時,shell就會在執行命令之前掃描它兩次.eval命令將首先會先掃描命令行進行所有的置換,然后再執行該命令。該命令適用於那些一次掃描無法實現其功能的變量。該命令對變量進行兩次掃描。

  1. eval可以用來回顯簡單的變量:

    wKioL1deJS6wUaiJAAAaYdaKV5I781.png

    這樣和普通的沒有加eval關鍵字的命令的作用一樣

 

2.eval也能用來執行含有字符串的命令:

         首先我們先來創建一個file文件,在這個文件中輸入一些我們想要輸出的文本,然后我們將cat file賦給變量myfile,整個過程如下:

wKioL1deJuig33V2AAA5CRWaAcI566.png

       從上面我們可以看到,當我們把cat file直接賦予myfile變量后,我們直接echo myfile的內容將不會輸出我們在file文件里面的文本。然后當我們用eval命令后,就會輸出我們想要的內容。這時因為eval命令不但可以置換該變量,還能執行相應的命令。在第一次掃描中進行了變量置換,第二次掃描就執行了該變量所包含的字符串里面的cat file 命令,所以就輸出了我們想要的內容。

 

3.eval命令還可以顯示我們傳遞給腳本的最后一個參數:

         我們現在有如下一個腳本:

            wKiom1deKEeiz7v6AAAPkVAlSY4951.png

我們有如下的執行過程:

wKiom1deKL_jf0q0AAAW7TqaYvk986.png

       從上面的執行結果們可以看到,當我們執行該腳本時,結果總是我們輸入的最后一個參數,這時怎么回事呢?這正是eval的這種用法,在上面的腳本中,eval命令首先把$$#解析為當前shell的參數個數(我們這里為4),然后再第二次掃描時才得出最后一個參數。

 

4.eval命令也可以創建指向變量的指針:

wKioL1deLEigxithAAAggTVMg00244.png

      在上面的命令中,我們先定義了一個變量val=100;然后又定義了個ptr並把val賦予之。然后我們用eval命令來解析ptr的值,我們可以看到是100.然后我們通過ptr修改了val的值,此時再看val的值,就變成了50了。


免責聲明!

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



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