LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1248|回复: 0

整理:eval 与变量的简接引用

[复制链接]
发表于 2007-12-2 01:14:31 | 显示全部楼层 |阅读模式
eval 与变量的简接引用
关于eval 的详细介绍,参阅
http://www.linuxsir.cn/bbs/showthre...threadid=99465
本贴只是对本人在http://www.linuxsir.cn/bbs/thread106206.html
贴子所述的作一个整理,祈望更容易阅读和理解。
一般来说,我们在介绍间接引用变量时,都这样描述:

we=you
a=we
eval c='$'$a  
echo '$c='$c  # c=you
上边实现的变量的间接引用是在=号的右边。

其实,我们还可以这样使用:
d=p
eval $d="1"    #结果:p=1  。这里 d 必须赋值。如果没有eval ,赋值语句$d="1"是错误的。
eval $c="2"    #结果:you=2

注意,上边实现的、间接操作的变量是在=号的左边。

这样我们就可以动态地、间接地对变量赋值和间接地设置变量名。这种变量的应用方法对编写通用函数是非常有用的.
例如我们可以这样操作数组:

mm=d1
pp=d2
eval $mm'['$i']'='${'$pp'['$j']}'
上述语句的功效相当于
d1[$i]=${d2[$j]}
如果
we=you
a=we
eval mm='$'$a
即 eval $mm'['$i']'='${'$pp'['$j']}'
就相当于you[$i]=${d2[$j]}


#一个例子,仅作示范
###############################################
# function redline()
#将文件名读入名为$mm(即$q1)所指的数组中。
#经主程序的调用后,依次生成core[@]  extra[@] commnuity[@] #数组,数组的内容为core,extra,community目录下的一般文件名,不包括目录
################################################
function readline()
{
if [ ! -z  "$1" ]
mm=$1
ls -ld $mm|awk '/^-/ {print $NF}'>file$mm # 取得$mm即$q1所指的目录下的文件名

i=0
while read line  
eval $mm'['$i']'='$line'
((i++))
done<file$mm
fi
}


###################################
#调用函数 readline  程序
for q1 in core extra  community
do
readline $q1
done
###################################
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表