linuxshelleval命令字符串作为命令执⾏
eval会对后⾯的cmdLine进⾏两遍扫描,如果第⼀遍扫描后,cmdLine是个普通命令,则执⾏此命令;如果cmdLine中含有变量的间接引⽤,则保证间接引⽤的语义。
举例如下:
set 11 22 33 44shell命令属于什么语言
如果要输出最近⼀个参数,即44,可以使⽤如下命令,
echo $4
但是如果我们不知道有⼏个参数的时候,要输出最后⼀个参数,⼤家可能会想到使⽤$#来输出最后⼀个参数,
如果使⽤命令:
echo "\$$#"
则得到的结果是 $4,⽽不是我们想要的44。这⾥涉及到⼀个变量间接引⽤的问题,我们的本意是输出 $
4,默认情况下,命令后忽略变量间接引⽤的情况。
这时候,就可以使⽤eval命令。
eval echo "\$$#"
得到的结果为44
1.eval命令将会⾸先扫描命令⾏进⾏所有的替换,憨厚再执⾏命令。该命令使⽤于那些⼀次扫描⽆法实现其功能的变量。该命令对变量进⾏两次扫描。这些需要进⾏两次扫描的变量有时候被称为复杂变量。
2.eval也可以⽤于回显简单变量,不⼀定时复杂变量。
NAME=ZONE
eval echo $NAME等价于echo $NAME
3.两次扫描
<内容:hello shell world!
myfile=""
echo $myfile #result:
eval echo $myfile #result:hello shell world!
从(2)可以知道第⼀次扫描进⾏了变量替换,第⼆次扫描执⾏了该字符串中所包含的命令
4.获得最后⼀个参数
echo "Last argument is $(eval echo \$$#)"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论