eval 将后面的命令的参数重新进行shell环境执行,例如
foo=10;x=foo
y=‘$’$x
那么执行
echo $y
$foo
eval echo $y
10
eval运行过程分解:
1.shell首先会将$y替换为$foo,这样命令就变成了eval echo $foo
2.这时eval将echo的参数$foo再次放入shell中执行一次,$foo替换为10,那么此时命令变为echo 10
3.屏幕输出10
通常情况下,shell和awk中的变量都是局部变量,不能直接传递,通过下面的例子我们知道awk中建立的变量shell是无法识别的
#在awk中建立一个变量var
echo|awk -v var="hello world" '{print var}'
hello world
#或者
awk -v var="hello world" 'BEGIN{print var}'
hello world
#这时如果直接执行
echo $var
什么都不会显示,因为shell里根本没有var这个变量。
我们可以使用awk把”特定格式“的内容定向到stdout上,让shell解析,例如我们让awk输出
t="hello world"
上面这句话如果在shell的环境里执行,就是对变量赋值,例如
awk 'BEGIN{print "t=\"hello world\""}'
t="hello world"
再通过eval命令
eval $(awk 'BEGIN{print "t=\"hello world\""}')
echo $t
hello world