Bash에서 08에서 10까지의 숫자 범위를 생성하면 한 자리 숫자 앞에 0이 포함되지 않습니다.

Bash에서 08에서 10까지의 숫자 범위를 생성하면 한 자리 숫자 앞에 0이 포함되지 않습니다.

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 시스템의 이 버전 3 일 가능성이 높습니다 bash. 중괄호 확장에서 정수를 0으로 채우는 기능은 버전 4에서 도입되었습니다 bash.

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

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

또는 다음과 같은 내용이 있습니다.

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

또한 작동합니다.

답변2

를 사용하는 대신 해당 구문의 출처를 bash사용할 수 있습니다 .zsh

zsh는 1995년(2.6-beta4에 도입됨)부터 지원되어 왔으므로 모든 CentOS 버전 {08..10}에서 사용할 수 있습니다 (2004년 CentOS의 첫 번째 릴리스).zsh

단어 분할이 적용되지 않고 에 종속되지 않도록 확장하는 대신 필요한 zsh대로 예제에서 실제로 구문을 사용했습니다 .bashecho "${i}"echo ${i}$i$IFS

답변3

seq대안으로 명령을 사용할 수 있습니다

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

관련 정보