我正在尝试创建一个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],因为当我用数字代替这些变量时,我不再遇到语法错误。
答案 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]}为空。