您的位置:首页 > 运维架构 > Linux

linux shell中的eval

2016-06-25 22:29 281 查看
语法:eval cmdLine
eval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证间接引用的语义。

举例如下:
set 11 22 33 44
如果要输出最近一个参数,即44,可以使用如下命令,
echo $4
但是如果我们不知道有几个参数的时候,要输出最后一个参数,大家可能会想到使用$#来输出最后一个参数,
如果使用命令:
echo "\$$#"
则得到的结果是 $4,而不是我们想要的44。这里涉及到一个变量间接引用的问题,我们的本意是输出 $4,默认情况下,命令后忽略变量间接引用的情况。
这时候,就可以使用eval命令。
eval echo "\$$#"
得到的结果为44

博主注:
实际应用:一些服务的启动脚本是这样取runlevel的
runlevel=$(set -- $(runlevel); eval "echo \$$#" )
set也是可以用来传参的,在实际工作中使用并不多,知道即可
参考文章:http://oldboy.blog.51cto.com/2561410/1175971/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell eval