歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> eval 特殊位置變量用法

eval 特殊位置變量用法

日期:2017/3/1 9:13:46   编辑:Linux編程

eval擅長處理有復雜變量的命令行,eval會對命令行進行2次掃描,第一次進行變量替換,第二次再執行變量替換後的命令行...

功能演示:
[root@db02 ~]# a=1
[root@db02 ~]# b=\$a
[root@db02 ~]# echo $b
$a
[root@db02 ~]# eval echo $b #這裡等於先輸出了$a,再執行了$a返回了數字1
1

eval結合set傳參案例一
解答一些服務的啟動腳本runlevel=$(set -- $(runlevel); eval "echo \$$#" ) 這個runlevel是怎麼把這個運行級別的取到的?
[root@db02 ~]# runlevel=$(set -- $(runlevel); eval "echo \$$#" )
[root@db02 ~]# echo $runlevel
3

分解命令正常的運行步驟是這樣的:

1)set傳參,$1和$2
[root@db02 ~]# set -- $(runlevel)
[root@db02 ~]# echo $1
N
[root@db02 ~]# echo $2
3

2)eval2次掃描,得到$2的結果為3
[root@db02 ~]# echo \$$#
$2
[root@db02 ~]# eval echo \$$#
3

3)輸出結果
[root@db02 ~]# runlevel=$2
[root@db02 ~]# echo $runlevel
3

eval結合數組用法案列二

設i=1,arrary=(a,b,c),如何才能得到 ${array$i[@]}的結果?
[root@db02 ~]# i=1
[root@db02 ~]# arrary=(a,b,c)
[root@db02 ~]# echo ${array$i[@]}
-bash: ${array$i[@]}: bad substitution

正確的做法:

[root@db02 ~]# i=1
[root@db02 ~]# array1=(a b c)
[root@db02 ~]# echo $\{array$i[@]}
${array1[@]}
[root@db02 ~]# eval echo $\{array$i[@]}
a b c

Copyright © Linux教程網 All Rights Reserved