eval命令妙用——变量嵌套替换

eval命令在Linux下的应用非常广泛,在写脚本的时候遇到一个变量嵌套的问题,用eval迎刃而解,略试不爽啊。

var1="hello"
i=1  #有时候i需要放在循环里,所以实际应用中有意义
what=var${i}
temp=what
echo $temp   #打印出what
eval temp=$(echo \$$what)
echo $temp #打印出hello

究其原因在于eval替换表达式中的变量再做运算(可以看到上面的\$$what是间接引用的形式,间接引用通常都要和eval共同使用来实现,因为eval会强制替换变量的值,详细内容可参见《高级bash脚本编程指南》(通过特殊字符“!”来找),另外参见关于eval命令的介绍

 

更多eval用法见下:

1、eval会把赋值语句中双引号之间的内容直接赋给‘=’前的变量,而不是当作字符串赋给变量

例如:

version="(2 4)" 是将字符串赋值给 version;

eval version="(2 4)" 执行时变成了 version=(2 4), 是把数组 (2 4) 赋值给 version

 

2、当在一个赋值语句的前面加上 eval 时,它就会将 后面表达式中以 $ 开头的所有变量进行整体替换

例如:

var1="1234 4556"

tmp=var

eval test="$"$tmp"1"

echo   $test

那么就会在屏幕上显示出 :

         1234 4556

 

3、eval会把标准输出中的内容进行赋值

例如

eval $(printf "a=\"1234\" b=\"4556\"") 其中printf也可以替换成echo

echo $a 输出1234

echo $b 输出4556

 


来源:

http://neoremind.net/2011/02/eval_command_usage/

关于eval的介绍:

http://363918.blog.51cto.com/353918/1341977

http://www.linuxso.com/command/eval.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值