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

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐