eval命令妙用——变量嵌套替换
eval命令在Linux下的应用非常广泛,在写脚本的时候遇到一个变量嵌套的问题,用eval迎刃而解,略试不爽啊。
究其原因在于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
更多推荐
所有评论(0)