Linuxshell编程(五)shell脚本常⽤函数和命令(3)eval详解shell脚本常⽤函数和命令(3)eval详解
eval cmdLine
eval会对后⾯的cmdLine进⾏两遍扫描,如果第⼀遍扫描后,cmdLine是个普通命令,则执⾏此命令;如果cmdLine中含有变量的间接引⽤,则保证间接引⽤的语义。
1)ev al也可以⽤于回显简单变量,不⼀定时复杂变量。
[root@controller1 etc]# var="xiaoming"
[root@controller1 ~]# echo $var
xiaoming
[root@controller1 ~]# eval echo $var
xiaoming
eval $var 等价于echo $var
2)ev al进⾏⼆次扫描
[root@controller1 ~]# echo "hello world!"&
echo "hello world"&
[root@controller1 ~]# var=""
[root@controller1 ~]# echo $var
2.eval⼆次扫描
[root@controller1 ~]# eval $var
hello world
或
[root@controller1 ~]# eval `echo $var`
hello world
或
[root@controller1 ~]# eval $(echo $var)
hello world
从2可以知道第⼀次扫描进⾏了变量替换,第⼆次扫描执⾏了该字符串中所包含的命令
2).例⼦
shell最简单脚本[root@controller1 etc]# set 11 22 33 44 55
如果要输出最近⼀个参数,即44,可以使⽤如下命令,
[root@controller1 etc]# echo $4
44
但是如果我们不知道有⼏个参数的时候,要输出最后⼀个参数,⼤家可能会想到使⽤$#来输出最后⼀个参数,
使⽤命令:
[root@controller1 etc]# echo "\$$#"
$5
则得到的结果是 $5,⽽不是我们想要的55。这⾥涉及到⼀个变量间接引⽤的问题,我们的本意是输出 $5,默认情况下,命令后忽略变量间接引⽤的情况。
这时候,就可以使⽤eval命令。
[root@controller1 etc]# eval echo "\$$#"
55
得到的结果为55
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论