Điểm:0

Tôi liên tục gặp lỗi: 'arr[$i] không phải là mã định danh hợp lệ' trên tập lệnh bash

lá cờ ph

Tôi đang thực hành chuỗi Fibonacci trên tập lệnh bash với mảng và vòng lặp for nhưng tôi gặp lỗi này

jrnl6T2.sh: dòng 10: `arr[$i]': không phải là định danh hợp lệ

Đây là tập tin .sh

#! /bin/bash

đọc -p "Nhập thuật ngữ: " thuật ngữ

mảng[0]=0
mảng[1]=1
cho (( i=2; i<$term; i++))
làm

    mảng[$i]= expr $((arr[$i-2]+arr[$i-1]))
    
xong

cho (( j=0; j<$term; j++ ))
làm
    tiếng vang ${arr[$j]}
    
xong

Vì tôi là người mới bắt đầu nên không chắc tại sao tôi lại gặp phải lỗi này. Tôi cũng đã google vấn đề này nhưng không tìm thấy giải pháp thích hợp. Tôi đang sử dụng Ubuntu 20.04.3

Điểm:2
lá cờ cn

Bạn đang làm sai hai điều trong câu lệnh tính toán biểu thức:

  1. Bạn đã đặt một ký tự khoảng trắng sau = dấu hiệu. Bạn không thể sử dụng khoảng trắng trước hoặc sau dấu bằng.

  2. expr là một mệnh lệnh. Để nắm bắt và chỉ định đầu ra của nó, bạn cần gửi kèm theo $(), như thế này:

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

    hoặc

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

    Xin lưu ý rằng expr lệnh trong trường hợp đầu tiên không làm gì cả; các $(()) xây dựng tính toán biểu thức.

Tuy nhiên, tôi khuyên bạn nên thực hiện các phép toán số học Bash bằng cách sử dụng để cho chỉ huy.

Kịch bản của bạn có thể được sửa chữa như thế này:

#!/bin/bash
đọc -p "Nhập thuật ngữ: " thuật ngữ
để mảng[0]=0
để mảng[1]=1
cho (( i=2; i<term; i++ ))
làm
  hãy để mảng[i]=mảng[i-2]+mảng[i-1]
xong
cho (( j=0; j<term; j++ ))
làm
  tiếng vang ${arr[j]}
xong

Một sự thay thế khác (tương đương với để cho lệnh, nhưng tôi không thích) là thế này:

mảng[i]=$(( mảng[i-2] + mảng[i-1] ))
Linear Data Structure avatar
lá cờ ph
bạn có thể giải thích tại sao bạn lại thay đổi `arr[$i]` bằng `arr[i]` không. Tôi đã kiểm tra, cả hai thuật ngữ đều cho cùng một đầu ra
FedKad avatar
lá cờ cn
Tôi nghĩ điều này đến từ Korn Shell. Xem phần cuối của phần 6.4.1 tại https://docstore.mik.ua/orelly/unix3/korn/ch06_04.htm

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.