bash eval

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


转载于:https://my.oschina.net/u/1267672/blog/172265

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值