我正在用数组和 for 循环在 bash 脚本上练习斐波那契数列,但出现了这个错误
jrnl6T2.sh: line 10: `arr[$i]': not a valid identifier
这是.sh 文件
#! /bin/bash
read -p "Enter term: " term
arr[0]=0
arr[1]=1
for (( i=2; i<$term; i++))
do
arr[$i]= expr $((arr[$i-2]+arr[$i-1]))
done
for (( j=0; j<$term; j++ ))
do
echo ${arr[$j]}
done
由于我是初学者,所以不确定为什么会出现此错误。我也在谷歌上搜索过这个问题,但没有找到合适的解决方案。我正在使用 ubuntu 20.04.3
答案1
您在表达式计算语句中做错了两件事:
您在符号后放置了一个空格字符
=
。您不能在符号之前或之后使用空格等号。expr
是一个命令。要捕获并分配其输出,您需要将其括在$()
, 像这样:arr[i]=$(expr $((arr[i-2]+arr[i-1])))
或者
arr[i]=$(expr ${arr[i-2]} + ${arr[i-1]})
请注意,
expr
第一种情况下的命令不执行任何操作;$(())
构造计算表达式。
但是,我建议您使用命令执行 Bash 算术运算let
。
您的脚本可以像这样更正:
#!/bin/bash
read -p "Enter term: " term
let arr[0]=0
let arr[1]=1
for (( i=2; i<term; i++ ))
do
let arr[i]=arr[i-2]+arr[i-1]
done
for (( j=0; j<term; j++ ))
do
echo ${arr[j]}
done
另一种选择(相当于命令let
,但我不喜欢)是这样的:
arr[i]=$(( arr[i-2] + arr[i-1] ))