5까지 세는 스크립트를 만드는 방법은 무엇입니까?

5까지 세는 스크립트를 만드는 방법은 무엇입니까?

저는 375와 3500(375, 380, 385...) 사이의 5의 배수를 모두 나열하는 매우 간단한 bash 스크립트를 만들려고 합니다. 내가 시도했지만 성공하지 못한 한 가지는 다음과 같습니다.

for i in {375..3500}
do
        echo $i
        (($i += 5))
done

나는 잠시 후 포기하고 BASIC에서 약 15초 만에 다음과 같이 썼습니다.

10 count = 375
20 print count
30 count = count+5
40 if count < 3500 then goto 20

Bash 스크립트로 BASIC 프로그램을 작성하는 방법은 무엇입니까?

답변1

어쨌든 중괄호 확장을 사용하고 있으므로 그 기능을 활용하십시오.

echo {375..3500..5}

printf이 기술을 사용하면 대체 텍스트 대신 를 사용하여 각 숫자를 별도의 줄에 인쇄할 수도 있습니다. echo예:

$ printf "Number %s is generated.\n" {375..3500..5}
Number 375 is generated.
Number 380 is generated.
Number 385 is generated.
...

편집하다

@kojiro가 주석에서 지적했듯이 Mac OS는 bash 3을 기본 셸로 사용합니다. 이는 중괄호 확장 시퀀스 표현식의 증분을 지원하지 않습니다. bash 버전 4로 업그레이드하거나 이를 지원하는 다른 셸(예: 최근 zsh)을 사용해야 합니다.

답변2

또는 전통적인 C 스타일 for 루프를 사용할 수 있습니다.

for ((i=375; i<=3500; i+=5)); do
    echo $i
done

이는 seq를 사용하는 것보다 덜 명확할 수 있지만 하위 프로세스를 생성하지 않습니다. C에 익숙하기 때문에 이해하는 데 어려움은 없지만 YMMV입니다.

답변3

SEQ(1) 사용

for i in $(seq 375 5 3500)
do
    echo $i
done

또는 간단하게:

seq 375 5 3500

답변4

물론 이에 대한 응용 프로그램이 있지만 명령줄에서 이를 수행하는 방법은 여러 가지가 있습니다( seq 375 5 3500). 가장 빠르고 쉬운 방법은 을 사용하는 것이지만 seq, 다음은 몇 가지 다른 옵션입니다.

for i in {375..3500}; do [[ (($i % 5)) -eq 0 ]] && echo $i; done

i=370; while [ $i -le 3500 ]; do printf "%s\n" $((i+=5)); done

perl -le '$i=shift;while($i<=$ARGV[0]){print $i; $i+=5; }' 375 3500
perl -le 'map{print $_ + 5} 370..3495'

awk 'BEGIN{ for(i=375;i<=3500;i+=5){print i}}'

관련 정보