zoukankan      html  css  js  c++  java
  • 在shell脚本文件中获取awk的值, 存于变量中?------来看看shell中eval的用法(转)

     遇到了, 折腾了一会儿, 所以记一下:

            错误1:

    #!/bin/bash
    
    a="hello world"
    b=$a | awk '{print $2}'
    echo $b

           错误2:

    #!/bin/bash
    
    a="hello world"
    b=echo $a | awk '{print $2}'
    echo $b

          正确姿势:

    #!/bin/bash
    
    a="hello world"
    b=$(echo $a | awk '{print $2}')
    echo $b

          其中$(xxx)表示执行xxx命令后的结果

          如果要把多个值保存在多个变量中, 怎么搞起呢? 可以用eval,  eval的作用是什么呢? 看个例子, 就明白了:

    #!/bin/bash
    
    hello=good
    eval "hello=world"
    echo $hello

           结果是world,  实际上就是把"hello=world"中的内容理解为一个语句,而不是一个串。

           来看看:

    #!/bin/bash
    
    a="hello world"
    b=$(echo $a | awk '{printf("var1=%s; var2=%s;",$1,$2)}')
    echo $b
    echo ${var1}
    echo ${var2}
    eval $b
    echo ${var1}
    echo ${var2}

           结果:

    ubuntu@VM-0-15-ubuntu:~/taoge/shell$ ./a.sh 
    var1=hello; var2=world;
    
    
    hello
    world

           分析一下,$b的结果是var1=hello; var2=world;

          此时, "var1=hello; var2=world;"仅仅是一个串,  而已, 而不是语句。 所以此时var1和var2都为空, 因为这两个变量根本就没有出现过。

          利用eval,  可以让"var1=hello; var2=world; "变成语句, 所以var1此时的值就是hello,  var2的值是world

          当然, 也可以一步到位:

    #!/bin/bash
    
    a="hello world"
    eval $(echo $a | awk '{printf("var1=%s; var2=%s;",$1,$2)}')
    echo ${var1}
    echo ${var2}

    转自:https://blog.csdn.net/stpeace/article/details/78342465

  • 相关阅读:
    CodeForces 7B
    CodeForces 4D
    离散化
    线段树入门
    洛谷 P3951 小凯的疑惑(赛瓦维斯特定理)
    Codeforces 1295D Same GCDs (欧拉函数)
    Codeforces 1295C Obtain The String (二分)
    Codeforces 1295B Infinite Prefixes
    Codeforces 1295A Display The Number(思维)
    Codeforces 1294F Three Paths on a Tree(树的直径,思维)
  • 原文地址:https://www.cnblogs.com/zl1991/p/14275931.html
Copyright © 2011-2022 走看看