亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

shell中的eval命令

發布時間:2020-05-28 05:42:01 來源:網絡 閱讀:4987 作者:小楊楊雪松 欄目:編程語言

       在shell的學習中,我們會遇到這兩種符號:反引號(` `)和$(),那么它們之間有什么區別和聯系呢?

       我們都知道在bash中,反引號和$()都是用來做命令替換的,命令替換就是用來重組命令行,先完成引號里面的命令,然后將其結果替換出來,再重組成新的命令行。也就是在執行一條命令時,會現將其中的` `,或者是$()中的語句當做命令執行一遍,再將結果加入到原命令中重新執行,例如:

shell中的eval命令

       從上面我們可以看到,當我們echo反引號里面的ls命令時,和我們直接執行ls命令是一樣的,也就正應里我們前面說的,也就是在執行一條命令時,會現將其中的` `,或者是$()中的語句當做命令執行一遍,再將結果加入到原命令中重新執行。

      

       雖然在操作上,這兩種都能達到同樣的效果,但是在平時的使用中,我們盡量使用$(),因為:

              首先,反引號` `與單引號‘ ’在使用上很可能混淆,給我們帶來不必要的麻煩

              其次,在多層次的復合替換中,反引號` `需要有額外的跳脫處理(反斜杠),而$()比較直觀;

              但是$()的弊端就是并不是所有的unix系統都支持這種方式,但反引號是肯定支持的。


eval命令用法:

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

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

    shell中的eval命令

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


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

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

shell中的eval命令

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


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

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

            shell中的eval命令

我們有如下的執行過程:

shell中的eval命令

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


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

shell中的eval命令

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






















向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博罗县| 余干县| 嵊州市| 朝阳县| 西乌珠穆沁旗| 沙河市| 青铜峡市| 延安市| 河池市| 长岛县| 望都县| 沅江市| 乌鲁木齐县| 博白县| 兰溪市| 米易县| 湾仔区| 卢龙县| 莲花县| 琼结县| 涿州市| 通化市| 即墨市| 珠海市| 商河县| 茌平县| 广饶县| 东阳市| 黄骅市| 两当县| 施甸县| 微山县| 宁武县| 长顺县| 新建县| 昌吉市| 江北区| 石林| 中江县| 巴彦淖尔市| 庆城县|