중괄호 확장을 사용하여 앞에 0이 있는 시퀀스를 만드는 방법

중괄호 확장을 사용하여 앞에 0이 있는 시퀀스를 만드는 방법

다음을 사용하면 예상되는 결과를 얻습니다.

$ echo {8..10}
8 9 10

이 중괄호 확장을 간단한 방법으로 사용하여 다음 출력을 얻으려면 어떻게 해야 합니까?

$ echo {8..10}
08 09 10

나는 이제 이것이 seq(시도하지 않고)를 사용하여 얻을 수 있다고 생각하지만 그것은 내가 원하는 것이 아닙니다.

유용한 정보는 내가 이 버전의 bash로 제한되어 있다는 것입니다. (해결책은 있지만 해결방안이 zsh없다면 bash공유해주세요)

$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)

답변1

0각 항목의 너비를 동일하게 하려면 첫 번째 숫자 앞에 를 붙입니다 .

$ echo {08..10}
08 09 10

중괄호 확장에 대한 bash 매뉴얼 페이지에서:

제공된 정수 앞에 0을 붙여 각 항목의 너비를 동일하게 만들 수 있습니다. x 또는 y가 0으로 시작하면 쉘은 생성된 모든 용어가 동일한 자릿수를 포함하도록 강제하고 필요한 경우 0을 채웁니다.

또한 옵션을 사용하여 앞에 0을 채워서 너비를 균등화할 수 있습니다 seq.-w

$ seq -w 8 10
08
09
10

$ seq -s " " -w 8 10
08 09 10

더 많은 제어를 원할 경우 printf 스타일 형식을 지정할 수도 있습니다.

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

답변2

나는 GNU bash, version 3.2.51(1)-release원래 포스터()와 동일한 bash 버전을 가지고 있는데 {08..12}그것은 나에게 작동하지 않지만 다음은 작동합니다:

for i in 0{8..9} {10..12}; do echo $i; done
08
09
10
11
12

이것은 약간 지루하지만 OP 버전의 bash(최신 버전인 것 같아요)에서는 작동합니다.

답변3

printf를 사용하는 경우

printf "%.2d " {8..10} 

이렇게 하면 2개의 문자가 강제로 적용되고 앞에 0이 추가됩니다. 3자리 숫자가 필요한 경우 "%.3d"로 변경할 수 있습니다.

답변4

참고로 자동 고정 너비는 최신 버전의 bash에만 나타나는 것 같습니다.

$ bash -version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

$ echo test{00..05}
test0 test1 test2 test3 test4 test5

관련 정보