spritz 앱을 만들려고합니다. 모든 것이 잘 작동했지만 어제 부터이 오류가 계속 발생합니다.
./spritz : 줄 176 : 구문 오류 : 예기치 않은 파일 끝
스크립트 파일을 확인했는데 모든 것이 완벽 해 보입니다. 혼란스럽고 마침내 if 문이 있는데 올바르게 보입니다! 마지막 부분은 다음과 같습니다.
#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
그 오류의 원인은 무엇입니까?
(계속)… (2) 타당한 이유가없고 자신이하고있는 일을 확실히 확신하지 않는 한 항상 셸 변수를 인용해야합니다. 예를 들어,
—
Scott
"$1"
, "$2"
, "$SECONDS"
,와 "$starttime"
. (3) 올바르게 들여 쓰기 된 코드를 읽고 디버그하는 것이 더 쉽습니다. (4) 왜 설정 FS
하고 사용하지 않습니까? (5) `…`
를 쓸 수 있습니다 $(…)
. (6) $(($SECONDS - $starttime))
동일하게 쓸 수 있습니다 $((SECONDS - starttime))
. 다시, 이것은 기본적으로 스타일의 문제입니다. (7) 왜 인쇄하고 있습니까"$words_read"
루프에서 루프를 수정하지 않을 때 루프에서 입니까?
디버깅 방법은 다음과 같습니다. 157-174 행을 삭제하고 스크립트를 다시 실행하십시오. 여전히 157 행 또는 158 행에있는 것으로보고 된 오류가 발생하면 문제점을 알고있는 것입니다. 157-174 행에 가 없다는 더 이상 되돌아 봐야합니다. 따라서 오류가 사라질 때까지 프로세스를 반복하십시오. ). … (계속)
—
Scott
(계속)… 오류가 사라지면 마지막으로 삭제 한 줄을 다시 넣고 휘파람을 시작하십시오. 예를 들어, 157-174 행을 삭제하면 오류가 사라지면 다시 넣은 다음 159-160, 163-168 및 171-172 행을 삭제하십시오. 교체하십시오
—
Scott
`grep …`
값을 값 목록으로 . 즉, 제거 과정을 사용하십시오.
Scott의 의견 중 일부에 대한 언급 : (ad 2) 게시 한 코드에서 수행중인 작업이 확실하다면
—
Janis
"$1"
인용 만 필요하고 (ad 4) 아마도 IFS
( 의미가 아님 FS
)?
;
줄 끝에서 이스케이프 처리되지 않은 (세미콜론) 이 필요한 상황을 모르겠습니다. . 줄 157, 161, 165, 168 및 169의 끝에서 세미콜론을 삭제할 수 있습니다. (또는 그대로 둘 수 있습니다. 스타일의 문제인 것 같습니다.) ... (계속)