Tôi đang cố gắng tạo ra một ứng dụng spitz. Mọi thứ đều hoạt động tốt, nhưng từ hôm qua tôi cứ bị lỗi này:
./spritz: dòng 176: lỗi cú pháp: kết thúc tệp không mong muốn
Tôi đã kiểm tra tập tin kịch bản và mọi thứ dường như hoàn hảo. Tôi bối rối, cuối cùng tôi có một câu lệnh if và nó có vẻ đúng! Đây là phần cuối cùng:
#checks if speed is 150
157 if [[ $2 -eq 150 ]];
158 then
159 starttime=$SECONDS
160 FS=$'\n'
161 for j in `grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]' $1`;
162 do
163 #Reads the text file in the centre of the screen
164 echo " ___________________"
165 echo " $j";
166 echo " ___________________"
167 echo " Speed 150 wpm"
168 sleep 0.9;
169 clear;
170 done
171 endtime=$(($SECONDS - $starttime))
172 echo "You read $words_read words in $endtime seconds!"
173 exit 8
174 fi
Điều gì có thể gây ra lỗi đó?
"$1"
, "$2"
, "$SECONDS"
, và "$starttime"
. (3) Dễ dàng hơn để đọc và gỡ lỗi mã được thụt lề đúng cách. (4) Tại sao bạn cài đặt FS
và sau đó không sử dụng nó? (5) `…`
có thể được viết $(…)
. (6) $(($SECONDS - $starttime))
tương đương có thể được viết $((SECONDS - starttime))
. Một lần nữa, đây về cơ bản là một vấn đề của phong cách. (7) Tại sao bạn in "$words_read"
trong vòng lặp khi bạn không sửa đổi nó trong vòng lặp?
`grep …`
bằng một danh sách các giá trị. Nói cách khác, sử dụng quá trình loại bỏ.
"$1"
cần trích dẫn, (quảng cáo 4) có lẽ ý anh ấy IFS
(và không FS
)?
;
dấu chấm phẩy (dấu chấm phẩy) ở cuối dòng . Bạn có thể xóa dấu chấm phẩy ở cuối các dòng 157, 161, 165, 168 và 169. (Hoặc bạn có thể để chúng vào; Tôi đoán đó là một câu hỏi về phong cách.) Từ (Cont'd)