shell用eval处理复杂变量

这里说的处理复杂变量就是定义并使用包含变量的变量,这在高级语言中几乎不须要什么特殊处理,但shell中就须要用到eval,下边是脚本中的部分代码,供参考:shell

#confFile 包含下边一行
#SLOTS_FOR_TENANT1=1,3,5,7
#部分代码:
theTenant1_blades=`cat $confFile | grep SLOTS_FOR_TENANT1 | awk -F ',' '{print NF}'`
count=1
while (($count <= $theTenant1_blades))
do
eval theTenant1_$count=`cat $confFile | grep SLOTS_FOR_TENANT1 | cut -d "=" -f 2 | cut -d "," -f $count`
let "count++"
done

这段程序执行结束后,变量theTenant1_blades等于4,theTenant1_1到theTenant1_4会分别被赋值1,3,5,7spa

引用时,也要经过eval:命令行

T1count=1
while (($T1count <= $theTenant1_blades))
do
  eval slotid="$"theTenant1_$T1count
  sed -i "s/<X-Y${T1count}>/0-${slotid}/g" $1
  let "T1count++"
done

这段代码经过从配置文件confFile中读取到的值,替换模板中的占位符。code

eval命令将会首先扫描命令行进行全部的置换,而后再执行该命令。该命令适用于那些一次扫描没法实现其功能的变量。简单理解就是将命令执行两次,获得第二次执行的结果。blog

"$"theTenant1_$T1count中第二个"$"但愿被先执行,因此没用双引号,第一个"$"但愿被后执行,因此加了个双引号。模板

相关文章
相关标签/搜索