|
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
################################### |
|