意外标记附近的语法错误“(”,间接扩展变量声明

时间:2013-06-18 16:06:03

标签: bash syntax token seq

在BASH,

我应该注意,变量$ Lambda0_List等是从代码中较早的输入文件中读取的。

PARAM_ARRAY=("Lambda0" "N" "M" "Sigma")

for i in "${PARAM_ARRAY[@]}"

do

 List="$i"_List

 Vary="$i"_Vary

 Use_Range="$i"_Use_Range

 Initial_Str="$i"_Initial

 Final_Str="$i"_Final

 Step_Str="$i"_Step

 Initial=${!Initial_Str}

 Step=${!Step_Str}

 Final=${!Final_Str}

 if [ "${!Vary}" ==  "T" ] 

 then

  if [ "${!Use_Range}" == "T" ]

  then 

   eval "$List=(`seq $Initial $Step $Final `)"

   echo "$i : vary, use_range" 

  else

   echo "$i: vary, use list"

  fi

 fi

done

引发语法错误

  

意外令牌附近的语法错误`('

通常我能够解释错误并找到解决方案,但我不明白为什么“(”是一个意外的令牌。

编辑:

我注意到如果我在shell中运行它,这行就可以了,但不是在我的脚本中运行,

编辑:

摆弄有问题的一行,我发现即使注释掉它也会出现语法错误!

  

/test.sh:line 266:意外令牌附近的语法错误`('

     

./ test.sh:line 266:######## eval "$List=( seq $ Initial $ Step $ Final`)“'

3 个答案:

答案 0 :(得分:0)

After!Final你有a)而不是}

答案 1 :(得分:0)

在筛选了一些早期的代码之后,我修复了'vs'的一些问题,并且这个错误停止了。我是BASH的新手所以我没想到带有')'的错误信息是由一个引用100行以上。

答案 2 :(得分:0)

为什么不使用elif或case?

eval“$ List =(seq $Initial $Step $Final)”

而不是

评估“$ {List =(seq $Initial $Step $Final)}”或评估“$ {List = seq $Initial $Step $Final}”