Linux-eval

shell中eval的用法示例:程序員

 

語  法:eval [參數]shell

功能說明:eval會對後面的[參數]進行兩遍掃描,若是在第一遍掃面後cmdLine是一個普通命令,則執行此命令;若是cmdLine中含有變量的間接引用,則保證間接引用的語義bash

補充說明:eval可讀取一連串的參數,而後再依參數自己的特性來執行。spa

參  數:參數不限數目,彼此之間用分號分開。命令行

 

使用案例:code

1.不加eval則將 | 和 more 當作了參數,而不是將文件按頁顯示blog

[root@ipi ~]# a="ls |more"
[root@ipi ~]# $a 
ls: cannot access |more: No such file or directory

加入eval改善執行結果:ip

[root@ipi ~]#eval $a
Desktop
Documents
Downloads
install.log install.log.syslog iptables.sh
正常輸出想要的結果

2.此條命令不加eval直接將${a}做爲參數輸出,加了eval則輸出了a的賦值「123」cmd

[root@ipi ~]# a="123"
[root@ipi ~]# echo '${'"a"'}'                         
${a}
[root@ipi ~]# eval echo '${'"a"'}'                #再次執行${a}命令
123 

3.以下:table

[root@ipi ~]#  set 1 2 3 4
若是咱們要輸出4 能夠使用echo $4,那假設咱們不知道一共有幾位,我要輸出最後一位的話得用「$#」,也就是\$$# [root@ipi ~]# \$$#$4
咱們發現它並無返回咱們想要的結果,so 加入eval能夠解決咱們的問題 [root@ipi
~]# eval \$$#
4

另外其餘高級用法後做補充!eval是對Bash Shell命令行處理規則的靈活應用,進而構造"智能"命令實現複雜的功能。上面說起的命令是eval其中一個很普通的應用,它重複了1次命令行參數傳遞過程,純粹地執行命令的命令。其實它是bash的難點,是高級bash程序員的必修之技。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息