bash에서 n 단계로 범위를 생성하는 방법은 무엇입니까? (증분으로 숫자 시퀀스 생성)


143

bash에서 범위를 반복하는 방법은

for i in {0..10}; do echo $i; done

단계를 통해 시퀀스를 반복하는 구문은 무엇입니까? 위의 예에서 짝수 만 받고 싶습니다.


짝수에 i를 2로 곱하면 : P
Joey Robert

곱셈 내가 말을해야, 오히려 추한
SilentGhost

2
@Omnifarious 나는 그렇게 확신하지 않을 것이다. 예를 들어 OS X에는 여전히 3.2가 제공됩니다. C 스타일 루프가 허용되어야한다고 말하고 싶습니다.
Eli Korvigo

답변:


195

할거야

for i in `seq 0 2 10`; do echo $i; done

(물론 seq 0 2 10자체적으로 동일한 출력을 생성 하지만 ).

seq수는 부동 소수점 숫자 (예를 들어, seq .5 .25 3.5)하지만 배쉬의 중괄호 확장은 정수만을 할 수 있습니다.


4
downvote는 귀하의 답변이 'sh'에 일반적이며 'bash'에 국한되지 않았기 때문에 추측 할 수 있습니다. 순수한 Bash 접근 방식 {begin end step}은 조금 더 잘 수행됩니다. 구식 'seq'방법은 busybox와 같은 구식 또는 소규모 메모리 시스템에서 편리합니다. 나는 당신과 TheBonsai의 대답을 찬성했습니다. :)
Scott Prive 2019

6
백 따옴표에 $ (...)를 사용하십시오. 따옴표는 산뜻하지 않습니다.
Omnifarious

seq 1000000 1000010은 수레 만 수행합니다. 실제로 정수로 만들 수는 없습니다! 버팀대 확장 작동합니다.
hmijail

112

Bash 4 의 버팀대 확장에는 단계 기능이 있습니다.

for {0..10..2}; do
  ..
done

Bash 2/3 (루프에 대한 C 스타일, 위 답변 참조) 또는 Bash 4에 관계없이 'seq'명령보다 더 선호합니다.


1
그리고 btw, bash4가 주요 OS에서 기본값인지 알고 있습니까?
SilentGhost

3
Bash4는 여전히 주류가 아닙니다. 왜 seq? IRC 채널 #bash에있는 봇의 말로 "seq (1)은 바보 같은 리눅스 하우투에서 10까지 카운트하는 데 사용되는 매우 비표준적인 외부 명령입니다."
TheBonsai 2016 년

내 이해는 seq가 coreutils의 일부라는 것입니다. 그것에 대해 비표준은 무엇입니까? 논쟁? 당신의 도움을 주셔서 감사합니다.
SilentGhost

4
* GNU coreutils가없는 시스템이 충분하지만 (배치가 설치되어 있음) * 불필요한 외부 프로세스를 만듭니다. * 모든 'seq'가 'seq'의 기능을 수행한다는 생각에 의존합니다. ISO에 의해 표준화되지 않음
TheBonsai

3
@becko 단계가 변수에 저장되어 있으면 i수행 할 수 없습니다 for {0..10..${i}}. 실패합니다.
Nehal J Wani

72

추가 과정없이 순수 배쉬 :

for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
    echo $COUNTER
done

10
+1 단계도 변수로 대체 될 수 있기 때문입니다.
Nehal J Wani

1
나는 이것이 실제로 대부분의 사람들이 원하는 것, 미리 정해진 단계 값으로 루프를 수행하는 간단한 방법이라고 생각합니다. 그것은 모든 seq 기반 답변보다 간단하게 들리며 Bash4 괄호 확장보다 명확한 구문이며 변수를 허용하는 것처럼 보입니다 (내가 시도하지는 않았지만 구문은 분명히 제안합니다).
tobylaroni

@TheBonsai의 답변과 달리 Bash 3에서 작동합니다.
srcerer

심지어 변수 ((i = "$ first"; i <= "$ last"; i + = "$ step"))도 해결합니다. 중괄호와 seq로는 쉽지 않습니다.
Blaa_Thor

20
#!/bin/bash
for i in $(seq 1 2 10)
do
   echo "skip by 2 value $i"
done

seq는 Linux 명령입니다. Mac OS X 또는 FreeBSD에서는 사용할 수 없습니다.
Dereckson

5
FWIW의 서열 내 표준 OS X 매버릭스 10.9.1에서 사용할 수 있습니다
마크 Setchell

나는 다른 sintax를 시도했지만 이것이 CentOS에서 저에게 유일한 일입니다.
@z-

3
> seq 4
1
2
3
4

> seq 2 5
2
3
4
5

> seq 4 2 12
4
6
8
10
12

> seq -w 4 2 12
04
06
08
10
12

> seq -s, 4 2 12
4,6,8,10,12
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.