命令代換及eval命令

shell中的命令代換符號有反引號和$()
反引號,在執行時,會將其中的語句作爲命令執行一遍,將執行結果代到原來的命令中。
例:
這裏寫圖片描述

這裏寫圖片描述

二者都爲命令代換符號,那麼是否完全相同呢?
①同爲命令代換符號,反引號(``)容易與單引號(’’)弄混
②在有多層次的符合替換中,需要額外的跳脫處理,此時用"$()“比較直觀
③反引號可以用於所有的Linux系統,可移植性高,”$()"在部分shell中無法使用

eval命令
功能:重新運算出參數的內容
語法:eval [參數]
補充說明: eval可讀取一連串的參數,然後再依參數本身的特性來執行
參數:參數可以不止一個,彼此之間用分號分開

eval 執行以下兩個步驟:
第一步,執行變量替換,類似與C語言的宏替代;
第二步,執行替換後的命令串。

eval會對後面的命令進行兩遍掃描,如果第一遍掃描後,命令是個普通命令,則執行此命令;如果命令中含有變量的間接引用,則保證間接引用的語義。也就是說,eval命令將會首先掃描命令行進行所有的置換,然後再執行該命令。因此,eval命令適用於那些一次掃描無法實現其功能的變量。
1.執行帶有字符串的命令
這裏寫圖片描述

eval對CAT變量進行兩次掃描,第一次CAT替換爲cat test,第二次爲cat test執行結果。這種需要掃描兩遍的變量稱爲複雜變量,eval也可以回顯簡單變量。
2.回顯簡單變量
這裏寫圖片描述

3.eval可以用來獲取shell的最後一個參數
如果我們知道參數個數,如連個參數,那麼可以用echo $2來查看最後一個參數,那麼如果不知道參數內容以及個數呢?

這裏寫圖片描述

這裏寫圖片描述

4.條件篩選
第一列對應KEY 、第二列爲VALUE,使用eval命令將KEY與VALUE的值對應起來,從文件中讀取

這裏寫圖片描述

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章