我一直收到错误:bash 脚本中的“arr[$i] 不是有效标识符”

我一直收到错误:bash 脚本中的“arr[$i] 不是有效标识符”

我正在用数组和 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

您在表达式计算语句中做错了两件事:

  1. 您在符号后放置了一个空格字符=。您不能在符号之前或之后使用空格等号

  2. 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] ))

相关内容