Puncte:0

Continui să primesc eroare: „arr[$i] nu este un identificator valid” în scriptul bash

drapel ph

Exersez seria Fibonacci pe script-ul bash cu matrice și buclă for, dar am primit această eroare

jrnl6T2.sh: linia 10: `arr[$i]': nu este un identificator valid

Aici este fișierul .sh

#! /bin/bash

citiți -p „Introduceți termenul: „ termenul

arr[0]=0
arr[1]=1
pentru (( i=2; i<$term; i++))
do

    arr[$i]= expr $((arr[$i-2]+arr[$i-1]))
    
Terminat

pentru (( j=0; j<$term; j++ ))
do
    eco ${arr[$j]}
    
Terminat

Deoarece sunt începător, nu știu sigur de ce primesc această eroare. Am cautat si pe google aceasta problema dar nu am gasit solutia potrivita. Folosesc ubuntu 20.04.3

Puncte:2
drapel cn

Faceți două lucruri greșite în declarația de calcul a expresiei:

  1. Ați pus un caracter spațiu după = semn. Nu puteți folosi spațiu înainte sau după semnul egal.

  2. expr este o comandă. Pentru a captura și a atribui ieșirea acestuia, trebuie să o închideți $(), ca aceasta:

    arr[i]=$(expr $((arr[i-2]+arr[i-1])))
    

    sau

    arr[i]=$(expr ${arr[i-2]} + ${arr[i-1]})
    

    Vă rugăm să rețineți că expr comanda în primul caz nu face nimic; cel $(()) construct calculează expresia.

Cu toate acestea, vă sugerez să faceți operații aritmetice Bash folosind lăsa comanda.

Scriptul dvs. poate fi corectat astfel:

#!/bin/bash
citiți -p „Introduceți termenul: „ termenul
fie arr[0]=0
fie arr[1]=1
pentru (( i=2; i<term; i++ ))
do
  lasă arr[i]=arr[i-2]+arr[i-1]
Terminat
pentru (( j=0; j<term; j++ ))
do
  echo ${arr[j]}
Terminat

O altă alternativă (care este echivalentă cu lăsa comanda, dar nu aș prefera) este aceasta:

arr[i]=$(( arr[i-2] + arr[i-1] ))
Linear Data Structure avatar
drapel ph
poți explica de ce ai schimbat `arr[$i]` cu `arr[i]`. Am verificat, ambii termeni dau aceeași ieșire
FedKad avatar
drapel cn
Cred că asta vine de la Korn Shell. Consultați sfârșitul secțiunii 6.4.1 la https://docstore.mik.ua/orelly/unix3/korn/ch06_04.htm

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.