sele 发表于 2018-5-20 10:48:26

linux shell中的eval

  语法: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/
页: [1]
查看完整版本: linux shell中的eval