Bash에서는 중괄호 확장에 정수 변수를 사용할 수 있습니까?

Bash에서는 중괄호 확장에 정수 변수를 사용할 수 있습니까?

다음 bash 스크립트가 있습니다.

#!/bin/bash

upperlim=10

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

for i in {0..$upperlim}
do
echo $i
done

첫 번째 for루프(아니요upperlim루프 제어의 변수)는 잘 작동하지만 두 번째 for루프(그리고루프 제어의 변수 upperlim)는 그렇지 않습니다. 두 번째 for루프가 제대로 작동하도록 수정하는 방법이 있습니까 ? 시간 내 주셔서 감사합니다.

답변1

그 이유는 bash의 이벤트 순서 때문입니다. 버팀대 확장이 발생합니다.앞으로변수가 확장됩니다. 목표를 달성하려면 C 스타일 for 루프를 사용해야 합니다.

upperlim=10

for ((i=0; i<=upperlim; i++)); do
   echo "$i"
done

답변2

내장 함수만 사용하여 자신의 스타일로 이 작업을 수행하려면 eval을 사용해야 합니다.

d=12

for i in `eval echo {0..$d}`
do
echo $i
done

하지만 함께 seq:

lowerlimit=0
upperlimit=12

for i in $(seq $lowerlimit $upperlimit)
do
echo $i
done

개인적으로는 seq.

답변3

POSIX 방식

휴대성을 중요시한다면POSIX 표준의 예:

i=2
END=5
while [ "$i" -le "$END" ]; do
    echo "$i"
    i=$(($i+1))
done

산출:

2
3
4
5

상황은아니요POSIX:

답변4

for i in $(seq ${1:-1} ${2:-10}); do                                            
        echo $i                                                                 
done 

                                                                       
                                                                            
i=${1:-1}                                                                       
while (( $i <= ${2:-10} )); do                                                  
        echo $i                                                                 
        i=$(($i + 1))                                                           
done

관련 정보