다음과 같이 셸에 정수 범위의 배열을 만들고 싶다고 가정해 보겠습니다.
- 다음으로 시작됨
$START_VALUE
- 다음으로 끝남
$END_VALUE
- 요소는
$STEP_SIZE
에서 시작하여 구분됩니다$START_VALUE
.
Python에 익숙한 사람이라면 누구나 효과적으로 찾고 있습니다.range
Bourne 셸의 대응 항목, 특히 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이 됩니다).