遇到了, 折腾了一下子, 因此记一下:shell
错误1:ubuntu
#!/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
正确姿式:bash
#!/bin/bash a="hello world" b=$(echo $a | awk '{print $2}') echo $b
其中$(xxx)表示执行xxx命令后的结果code
若是要把多个值保存在多个变量中, 怎么搞起呢? 能够用eval, eval的做用是什么呢? 看个例子, 就明白了:class
#!/bin/bash hello=good eval "hello=world" echo $hello
结果是world, 实际上就是把"hello=world"中的内容理解为一个语句,而不是一个串。awk
来看看:变量
#!/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}
结果:co
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都为空, 由于这两个变量根本就没有出现过。printf
利用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}
很少说。