이 증가하는 for 루프가 잘못된 변수를 반환하는 이유는 무엇입니까?

이 증가하는 for 루프가 잘못된 변수를 반환하는 이유는 무엇입니까?

GRASS GIS의 CLI에서 이 쉘 스크립트를 호출하려고 합니다.

for (( day=5; day<367; day+5 )); do
  # commands that I've tested without a loop.
done
exit 0

반품

Syntax error: Bad for loop variable

답변1

이 오류 메시지의 출처는 다음과 같습니다.금연 건강 증진 협회. 비슷한 구문을 가진 여러 쉘이 있습니다. Ash는 작은 메모리 공간과 빠른 실행을 위해 설계된 비교적 기본적인 디자인입니다. 또 다른 일반적인 껍질은불다. Bash에는 더 많은 기능이 있습니다. 게시한 구문은 bash(및 일부 다른 쉘(ash는 제외))에만 존재합니다.

재에는 다음과 같이 작성해야 합니다.

day=5
while [ $day -lt 367 ]; do
  day=$((day + 5))
done

Linux 배포판에 따라 /bin/sh이는 ash 또는 bash입니다(일부 이국적인 버전은 다른 구현을 사용할 수 있음). bash 구문을 사용하여 스크립트를 작성하는 경우 해당 구문을 #!/bin/bash맨 위에 배치하세요 .

당신이 그것을 쓴 곳을 의미한다고 가정하면 , 그렇지 않으면 무한 루프입니다.day+=5day+5

답변2

어쩌면 GRASS GIS가 "day"라는 변수를 미리 정의했을 수도 있습니다.

그런데 이 코드는 direct bash에서는 작동하지 않습니다. 실제로 "일"의 가치는 증가하지 않습니다.

#!/bin/bash
for (( day=5; day<367; day=day+5 )); do
  # commands that I've tested without a loop.
        echo $day
done
exit 0

이것은 RHEL 5.0 서버에서 bash 2.05b를 사용하여 나에게 효과적이었습니다.

관련 정보