shell用eval处理复杂变量

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

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

引用时,也要通过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中读取到的值,替换模板中的占位符。

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

"$"theTenant1_$T1count中第二个"$"希望被先执行,所以没用双引号,第一个"$"希望被后执行,所以加了个双引号。

转载于:https://www.cnblogs.com/jason7201/p/5900561.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值