• shell中eval命令


    语法:eval cmdLine
    eval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证间接引用的语义。
     
    举例如下:
    set 11 22 33 44
    如果要输出最近一个参数,即44,可以使用如下命令,
    echo $4
    但是如果我们不知道有几个参数的时候,要输出最后一个参数,大家可能会想到使用$#来输出最后一个参数,
    如果使用命令:
    echo "$$#"
    则得到的结果是 $4,而不是我们想要的44。这里涉及到一个变量间接引用的问题,我们的本意是输出 $4,默认情况下,命令后忽略变量间接引用的情况。
    这时候,就可以使用eval命令。
    eval echo "$$#"
    得到的结果为44
    -------------------------------------------------------------

    1.eval命令将会首先扫描命令行进行所有的替换,憨厚再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。

    2.eval也可以用于回显简单变量,不一定时复杂变量。

    NAME=ZONE

    eval echo $NAME等价于echo $NAME

    3.两次扫描

    test.txt内容:hello shell world!

    myfile="cat test.txt"

    (1)echo $myfile  #result:cat test.txt

    (2)eval echo $myfile  #result:hello shell world!

    从(2)可以知道第一次扫描进行了变量替换,第二次扫描执行了该字符串中所包含的命令

    4.获得最后一个参数

    echo "Last argument is $(eval echo $$#)"

    echo "Last argument is $(eval echo $#)"

  • 相关阅读:
    VC++以及VS个版本比较 及 C++编译器比较
    这本书的封面
    json_encode(),json_deocde()用法说明
    循环匹配,一般用于多选列表选中状态
    js判断变量是否被定义
    js onload()事件调用方法
    js push使用方法
    iframe去掉边滚动条
    ajax上传文件(使用ajaxfileupload)
    基于url的权限控制
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7309004.html
Copyright © 2020-2023  润新知