Bourne 쉘에서 사용자 정의 단계 크기를 갖는 범위 배열

Bourne 쉘에서 사용자 정의 단계 크기를 갖는 범위 배열

다음과 같이 셸에 정수 범위의 배열을 만들고 싶다고 가정해 보겠습니다.

  • 다음으로 시작됨$START_VALUE
  • 다음으로 끝남$END_VALUE
  • 요소는 $STEP_SIZE에서 시작하여 구분됩니다 $START_VALUE.

Python에 익숙한 사람이라면 누구나 효과적으로 찾고 있습니다.rangeBourne 셸의 대응 항목, 특히 Zsh입니다.

여기에 도움이 될 수 있는 쉘 내장 기능이 있습니까?


참고: Python의 range함수는 범위 배열의 증가 및 감소를 지원합니다(예: $START_VALUE보다 크거나 작은 경우 $END_VALUE).

답변1

Bash에서와 마찬가지로,zsh에서, 이것은 작동합니다 :

printf '%s ' {2..23..3}; echo

이것은 또한 작동하기 때문에:

set   -- {2..23..3}
for   i
do    echo "$i"
done

이와 같이:

set   -- {2..23..3}
for i; do
      echo "$i"
done

이와 같이:

for i in {0..20..2}
do
    echo "$i"
done

zsh에서는 작동하지만 bash에서는 작동하지 않는 것은 변수 범위입니다.

a=2 b=23 c=3
set   -- {$a..$b..$c}
for   i
do    echo $i
done

답변2

Bash 및 zsh에서는 {START..STOP..INCRMENT}를 사용할 수 있으며 START < STOP일 때 예상대로 작동합니다. 예를 들어,

 for i in {0..20..2}
 do
      echo $i
 done

0, 2, 4, 6, ..., 20을 인쇄합니다. Bash에서는 범위를 {20..0..-2}로 변경하여 "역방향" 범위를 수행할 수도 있습니다. 그러면 20, 18, 16, . .., 2, 0. 그러나 이것은 zsh에서는 작동하지 않습니다.

bash와 zsh 모두에서 작동하는 방법은 seq를 사용하는 것입니다.

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

20, 18, 16, ..., 0(bash 및 zsh에서)을 인쇄합니다. 여기서 형식은 FIRST, STEP, LAST입니다(STEP은 선택사항이며 생략하면 1이 됩니다).

관련 정보