저는 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}}'