arrays - 尝试以算术调用数组变量时出错

标签 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] 时,因为当我用数字替换这些变量时,我不再遇到语法错误。

最佳答案

这些是 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/

相关文章:

C - 总线错误(核心已转储) - 矩阵错误

python - 在 Python 中保存二维数组或列表的 CSV 文件的最佳方法?

bash - rsync - 排除除子目录之外的所有内容,但排除子子目录

linux - 如何检查文件是否仍在 bash 中复制?

php - 字符串未通过 shell_exec 正确传递到 bash 脚本

javascript - 使用indexOf时数组排序不正确/不可预测?

Java - 创建类的数组时将参数传递给类构造函数

linux - 如何从终端更改文件的 MIME 类型?

python - 如何使用 rpm 规范文件中的参数调用函数?

linux - 移动文本文件中的特定行