shell-腳本-eval命令

eval命令

  • eval命令將會首先掃描命令行進行所有的置換,然後再執行該命令。該命令適用於那些一次掃描無法實現其功能的變量,該命令對變量進行兩次掃描
    範例
[root@server ~]# CMD=whoami
[root@server ~]# echo $CMD
whoami
[root@server ~]# eval $CMD
root
[root@server ~]# n=10
[root@server ~]# echo {0..$n}
{0..10}
[root@server ~]# eval echo {0..$n}
[root@centos6 ~]# n=10
[root@centos6 ~]# echo {1..$n}
{1..10}
[root@centos6 ~]# eval echo {1..$n}
1 2 3 4 5 6 7 8 9 10
這樣也可以
[root@centos6 ~]# cmd=whoami
[root@centos6 ~]# $cmd
root
  • eval命令是先將變量替換成字符串,然後在執行字符串

間接變量引用

  • 如果第一個變量的值是第二個變量的名字,從第一個變量引用第二個變量的值就稱爲間接變量引用
  • variable1的值是variable2,而variable2又是變量名,variable2的值爲value,間接變量引用是通過variable1獲得變量值value的行爲
variable1=variable2
variable2=value

bash shell 提供兩種格式實現間接變量引用

eval tempvar=\$$variable1
tempvar=${!variable1}
  • mark
  • 這種事eval echo $aeval a當做變量,第二次就把b $shell會認爲是進程號
[root@centos6 ~]# echo ${!a}
c

範例

[root@server ~]# N=NAME
[root@server ~]# NAME=wangxiaochun
[root@server ~]# N1=${!N}
[root@server ~]# echo $N1
wangxiaochun
[root@server ~]# eval N2=\$$N
[root@server ~]# echo $N2
wangxiaochun
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章