我正在尝试创建一个 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] 时,因为当我用数字替换这些变量时,我不再遇到语法错误。
最佳答案
这些是 bc
语法错误:$alpha
变量未初始化。
以下是打开 shell 跟踪时会发生的情况:
$ 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 数组,因此一旦 begin > 1,${T[$begin]} 就为空。
关于arrays - 尝试以算术调用数组变量时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52592975/