shell中eval用法

http://mingyang.blog.51cto.com/2807508/1550281/

a). eval直接接原生命令, 和直接执行无区别 
#eval ls -l /home/shellscripts/
#ls -l /home/shellscripts/

b). 替换变量
aa.sh

#!/bin/bash
dirpath=/home/shellscripts
cmd="ls -l $dirpath | awk -F ' ' '{print \$9}'"
eval $cmd

在执行eval $cmd的时候,第一次先将$cmd用值替换,第二次将变量$cmd的值直接在shell
中以命令的形式来执行。 

c). 可以执行任何值为命令组合的变量
上例中 cmd="ls -l $dirpath | awk -F ' ' '{print \$9}'",能不能直接执行 $cmd呢 ?
$cmd的值就是一个命令啊,实际执行是报错的。 

在实际使用中,可以将任意组合的命令赋值给一个变量,然后在需要的位置通过eval $variable
来执行这个命令。试想如果你遇到了一个很复杂的命令组合,可能在多个地方需要执行,此时使
用eval的功能就很方便。当然,有人可能会说可以使用函数,但是函数只有在调用的时候才会生
效,且每次调用都要到内存中执行一遍,变量一旦赋值,直到变量的生命周期结束都会存在内层
中供其调用。

d). 变量替换赋值
#!/bin/bash
x=100
y=x
eval echo \$$y    ---- $y就是x ,这里就是 echo $x , 就是 100 
eval $y=50        ---- eval $y=50 这句话相当于一个变量赋值,$y替换成x而将50赋值给了x变量
echo $x           
eval echo \$$y    ---- 同上 

请使用浏览器的分享功能分享到微信等