尝试在算术中调用数组变量时出错

时间:2018-10-01 14:08:34

标签: arrays linux bash

我正在尝试创建一个bash脚本,该脚本执行一种算术运算,该算术运算从数组中调用变量,但是该程序不断抛出语法错误。

代码如下:

#! /system/bin/bash

#Declaring y, L and T
declare -a y=()
declare -a L=()
declare -a T=()
y=(1 2 3 4 5 6)
L[1]=12
T[1]=5

#Finding all Levels of (L) sub t 
ycount=$(( ${#y[@]} + 1 ))                      
begin=1
counter=2

while [ $begin -lt $ycount ]
do                                                                         
     L[$counter]=$( echo "($alpha * ${y[$begin]}) + ((1 - $alpha) *(${L[$begin]} + ${T[$begin]}))" | bc -l)
     begin=$(( $begin + 1 ))
     counter=$(( $counter + 1 ))
done

在运行代码时会发生这种情况:

$ bash /tmp/test.sh
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error

我非常确定错误在于调用L [$ begin]和T [$ begin],因为当我用数字代替这些变量时,我不再遇到语法错误。

1 个答案:

答案 0 :(得分:1)

这些是bc语法错误:$alpha变量未初始化。

打开外壳跟踪时会发生以下情况:

$ bash -x /tmp/test.sh
+ y=()
+ declare -a y
+ L=()
+ declare -a L
+ T=()
+ declare -a T
+ y=(1 2 3 4 5 6)
+ L[1]=12
+ T[1]=5
+ ycount=7
+ begin=1
+ counter=2
+ '[' 1 -lt 7 ']'
++ bc -l
++ echo '( * 2) + ((1 - ) *(12 + 5))'
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
+ L[$counter]=
+ begin=2
... and so on

您还遇到了“一举成名”的数组索引错误:

$ y=(1 2 3 4 5 6)
$ declare -p y
declare -a y=([0]="1" [1]="2" [2]="3" [3]="4" [4]="5" [5]="6")
# .............^

您也永远不会分配给T数组,因此,开始> 1时,$ {T [$ begin]}为空。