shell脚本:如何正确实现以下思路,即时定义变量名?

时间:2014-11-03 05:16:36

标签: linux bash shell

类似BASH中的以下内容

iDAV=0
for line in $(cat file); do

 IFS_bk=$IFS;  IFS=' ';  arr=($line)
 if [[ ${arr[0]} == *'DAV'* ]]; then
   iDAV=$(( $iDAV+1 ))
   val$iDAV=${arr[0]}
   cal$iDAV=${arr[1]}
 fi
 IFS=$IFS_bk

done

运行时,会抱怨以下

calc_OSZICAR: line 88: val1=12: command not found  
calc_OSZICAR: line 89: cal1=13: command not found

我实际上希望脚本在迭代期间定义val1, val2, val3, ...cal1, cal2, cal3, ...。任何人都知道如何做到这一点?

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以使用declare指令创建动态变量:

declare "val$iDAV"="${arr[0]}"
declare "cal$iDAV"="${arr[1]}"

答案 1 :(得分:0)

使用eval。 运行此示例脚本:

iDav=1
eval val$iDav=333
eval echo \$val$iDav