쉘스크립트,seq 에 관한 질문입니다.

jw8704의 이미지

/etc/cron.daily/cyrus-imapd
ROTATE=6
seq $[ $ROTATE -1 ] 1 | while read i; do "Sentence"

라는것의 1 이게 뭐하는건지 이해가 안되어서 다음과 같은 작업을 해봤습니다.

seq $ [ $ROTATE -1 ] | while read i; do
echo $i
done

이렇게 하면 5,4,3,2,1 이 출력이 되지만

seq $ [ $ROTATE -1 ] 1 | while read i; do
echo $i
done

하면 아무것도 출력되지않습니다.

1을 왜 붙여준걸까요?

조언부탁드립니다.

adaylily의 이미지

상황을 전반적으로 이해하자면, 무한루프라고 해야 하나?
그게 돌아가는 것 같네요.
출력이 안되니까, 종료값을 넣어준것 같은데,
이해는 되지만, 좀 프로그램이 이상하네요.

bootmeta의 이미지

       seq [OPTION]... LAST
       seq [OPTION]... FIRST LAST
       seq [OPTION]... FIRST INCREMENT LAST

If  FIRST or INCREMENT is omitted, it defaults to 1.  That is, an omit‐
ted INCREMENT defaults to 1 even  when  LAST  is  smaller  than  FIRST.

cyrus-imapd code는 제 시스템에선(ubuntu 10.04) 정상적으로 돌아가지 않습니다.
FIRST값 5, last값 1은 있으나 increment값이 생략된 경우(무조건 1로 간주)하므로 loop를 돌지 않습니다.

예를 든 것처럼 1을 생략하면, first값 1(default), last값 5, increment 1(default)이므로 1,2,3,4,5가 찍힙니다.
그러나 1을 추가하면, first값 5, last값 1, increment 1(default)이므로 loop를 돌지 않습니다.

ps)
cyrus-imapd가 깔린 system에서 man seq 해보시길
해당 system에선 increment가 생략된 경우, first가 last보다 크다면 자동으로 increment를 -1로 해줄지도 모르겠군요.

lusilis의 이미지

저도 좀 궁금했던게 ROTATE=1 로 잡으면 seq 0 1 이 되고 1이 출력 됩니다..

그런데 왜 저 상황에서는 아무것도 안 떨어질까요..