Score:0

ฉันได้รับข้อผิดพลาด: 'arr[$i] ไม่ใช่ตัวระบุที่ถูกต้อง' ในสคริปต์ทุบตี

ธง ph

ฉันกำลังฝึก Fibonacci series บนสคริปต์ทุบตีด้วยอาร์เรย์และ for loop แต่ฉันพบข้อผิดพลาดนี้

jrnl6T2.sh: บรรทัดที่ 10: `arr[$i]': ไม่ใช่ตัวระบุที่ถูกต้อง

นี่คือไฟล์ .sh

#! /ถัง/ทุบตี

อ่าน -p "ป้อนคำ:" คำ

arr[0]=0
arr[1]=1
สำหรับ (( i=2; i<$term; i++))
ทำ

    arr[$i]= expr $((arr[$i-2]+arr[$i-1]))
    
เสร็จแล้ว

สำหรับ (( j=0; j<$term; j++ ))
ทำ
    เสียงสะท้อน ${arr[$j]}
    
เสร็จแล้ว

เนื่องจากฉันเป็นมือใหม่จึงไม่แน่ใจว่าเหตุใดฉันจึงได้รับข้อผิดพลาดนี้ ฉันมี Google ปัญหานี้ด้วย แต่ไม่พบวิธีแก้ไขที่เหมาะสม ฉันใช้อูบุนตู 20.04.3

Score:2
ธง cn

คุณกำลังทำสองสิ่งผิดในคำสั่งการคำนวณนิพจน์:

  1. คุณได้ใส่อักขระเว้นวรรคหลัง = เข้าสู่ระบบ. คุณไม่สามารถใช้ช่องว่างก่อนหรือหลัง เครื่องหมายเท่ากับ.

  2. หมดอายุ เป็นคำสั่ง ในการจับภาพและกำหนดเอาต์พุต คุณต้องใส่มันเข้าไป $(), แบบนี้:

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

    หรือ

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

    โปรดทราบว่า หมดอายุ คำสั่งในกรณีแรกไม่ทำอะไรเลย เดอะ $(()) สร้างคำนวณนิพจน์

อย่างไรก็ตาม ฉันขอแนะนำให้คุณดำเนินการทางคณิตศาสตร์ Bash โดยใช้ อนุญาต สั่งการ.

สคริปต์ของคุณสามารถแก้ไขได้ดังนี้:

#!/bin/bash
อ่าน -p "ป้อนคำ:" คำ
ให้ arr[0]=0
ให้ arr[1]=1
สำหรับ (( i=2; i<term; i++ ))
ทำ
  ให้ arr[i]=arr[i-2]+arr[i-1]
เสร็จแล้ว
สำหรับ (( j=0; j<ระยะ; j++ ))
ทำ
  เสียงสะท้อน ${arr[j]}
เสร็จแล้ว

อีกทางเลือกหนึ่ง (ซึ่งเทียบเท่ากับ อนุญาต คำสั่ง แต่ฉันไม่ต้องการ) คือ:

arr[i]=$(( arr[i-2] + arr[i-1] ))
Linear Data Structure avatar
ph flag
คุณอธิบายได้ไหมว่าทำไมคุณถึงเปลี่ยน `arr[$i]` เป็น `arr[i]` ฉันตรวจสอบแล้ว ทั้งสองคำให้ผลลัพธ์เดียวกัน
FedKad avatar
cn flag
ฉันคิดว่านี่มาจาก Korn Shell ดูส่วนท้ายของหัวข้อ 6.4.1 ที่ https://docstore.mik.ua/orelly/unix3/korn/ch06_04.htm

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา