숫자 앞의 0을 제외하고 bash에서 08에서 10까지의 숫자 범위를 만듭니다.

숫자 앞의 0을 제외하고 bash에서 08에서 10까지의 숫자 범위를 만듭니다.

CentOS 7.2를 실행하는 로컬 컴퓨터에서 다음을 수행합니다.

for i in {8..12}; do echo ${i}; done

나는 가지고있다:

8
9
10

하지만 내가 이렇게 하면:

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

나는 가지고있다:

08
09
10

그러나 내가 액세스할 수 있는 CentOS 5.6을 실행하는 서버에서 다음 두 명령을 실행하면 동일한 출력이 생성됩니다.

8
9
10

왜 8과 9 앞에는 0이 없나요? bash 버전 때문인가요, 아니면 환경 구성 때문인가요? 서버가 10보다 작은 숫자 앞에 0을 넣도록 세션별로 또는 영구적으로 변경할 수 있습니까?

답변1

CentOS 5.6 시스템의 버전은 bash버전 3일 가능성이 높습니다. 중괄호 확장의 정수 제로 패딩은 의 버전 4에서 도입되었습니다 bash.

해결 방법은 설치를 bash최신 버전으로 업데이트하거나 0으로 채워진 정수를 생성하는 대체 방법을 사용하는 것입니다.

printf '%02d\n' {8..10}

아니면 다음과 같은 것

for i in 0{1..9} {10..20}; do
    echo "$i"
done

작동할 것입니다.

답변2

bashzsh대신 해당 구문의 소스를 사용할 수 있습니다 .

zsh1995년(2.6-beta4에 도입)부터 지원되어 모든 CentOS 버전 (2004년 CentOS의 첫 번째 버전) {08..10}에서 사용할 수 있습니다 .zsh

확장이 단어 분할의 대상이 되지 않도록 (따라서 이에 종속되지 않도록 ) 실제로 필요한 zsh것처럼 예제에서 구문을 사용했습니다 .bashecho "${i}"echo ${i}$i$IFS

답변3

seq또는 다음 명령을 사용할 수 있습니다.

$ seq -f "%02g" 8 10
08
09
10

관련 정보